解决PostMan既可以使用form-data(key-value)传参测试数据又可以使用raw(json字符串)传参测试数据问题
前言
因为对接第三方接口,返回数据需要application/json格式的数据,但是我们通常数据测试都是key-value传参测试,也就是form-data方式。
通常这样格式测试数据,我们只需要在控制器里面写@RequestParam注解就好了
就像这样传参就可以实现上面的效果
如果想要使用raw的json传参的话,就得使用到@RequestBody注解了
就像这样传参就可以实现上面的效果
但是上面这两种方式传参就有一个问题会出现了。如果我想要既可以使用raw传参测试数据(也就是json格式的传参),又想要form-data(表单格式传参{key-value})传参测试数据呢?效果就是同一接口实现raw测试和form-data测试,如图
工具类
废话少说,直接上代码。
下面这些代码可以直接当成一个工具类来使用 使用了一个@Component
@Component
public class JsonUtils {
public JSONObject getJSONParam(HttpServletRequest request){
JSONObject jsonParam= null;
try{
BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line= null;
while ((line = streamReader.readLine()) != null) {
sb.append(line);
}
jsonParam= JSONObject.parseObject(sb.toString());
System.out.println(jsonParam.toJSONString());
}catch(Exception e) {
e.printStackTrace();
}
return jsonParam;
}
}
因为需要用到这个工具类里面的getJSONParam方法,所以注入一下
分析代码
@RequestParam 里面参数就是你form-data里面所需要传入参数。
HttpServletRequest request 这个是用来获取 JSON 参数,也就是获取raw里面的json参数。
这个是用来判断你获取到的值,如果你用的是form-data测试需要获取到的值就是@RequestParam里面的参数值
假设这个是你要传参的方法
Object taskId= test.getparameter();
@ApiOperation("/测试数据")
@RequestMapping(value = "/test", method = RequestMethod.POST, produces = "application/json")
public Result test(@RequestParam(value = "platformId",required = false) String platformId,@RequestParam(value = "tasks",required = false) String tasks,HttpServletRequest request){
JSONObject jsonParam= jsonUtils.getJSONParam(request);
if(jsonParam == null){
Object taskId=test.getparameter(platformId,tasks);
return Result.success("success",taskId);
}
Object taskId=test.getparameter(jsonParam.getString("platformId"),jsonParam.getString("tasks"));
return Result.success("success",taskId);
}
因为上面的代码虽然运行的时候效果都能出来,但是后台会报错:“java.lang.NullPointerException”
所以我改了一下,如下图
@ApiOperation("/测试")
@RequestMapping(value = "/test", method = RequestMethod.POST, produces = "application/json")
public Result test(@RequestParam(value = "platformId",required = false) String platformId,@RequestParam(value = "tasks",required = false) String tasks,HttpServletRequest request){
JSONObject jsonParam= null;
try{
BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line= null;
while ((line = streamReader.readLine()) != null) {
sb.append(line);
}
jsonParam= JSONObject.parseObject(sb.toString());
if(jsonParam == null){
Object taskId=test.getparameter(platformId,tasks);
return Result.success("success",taskId);
}
}catch(Exception e) {
e.printStackTrace();
}
Object taskId=test.getparameter(jsonParam.getString("platformId"),jsonParam.getString("tasks"));
return Result.success("success",taskId);
}
上面需要导入的包有
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.InputStreamReader;
maven包
<!-- 引入fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
本篇解决PostMan既可以使用form-data(key-value)传参测试数据又可以使用raw(json字符串)传参测试数据问题就到此结束了
|