这两天有个需求,就是前端传给后端对参数为String类型,但是这个String类型的内容值为json的key-value格式,因为这个key-value不确定是一层还多多层的json嵌套格式,所以只能定义成String,然后让后端去解析,而不是像直接定义为对象或者map格式让前端直接按照json就好。
但是有个问题,为在用swagger测试的时候发现,直接传入字符串,后端的接收是有问题的,具体如图:
请求参数
接收的结果:
不管是上面那一种入参方式,后端拿到的就不是一个数据值,只能拿到一个"{"。
找了好久,最后找到了一种解决办法。
前端测试入参:
后端接收入参:
到这,解决问题。
完整代码:
@PostMapping("/jsonStringTest1")
@ApiOperation(value = "测试后端接收json字符串")
public void jsonStringTest1(@RequestBody String request) {
System.out.println(request);
}
@PostMapping("/jsonStringTest12")
@ApiOperation(value = "测试后端接收json字符串")
public void jsonStringTest2(HttpServletRequest request) {
String result = getJSONParam(request).toJSONString();
System.out.println(result);
}
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;
while ((line = streamReader.readLine()) != null) {
sb.append(line);
}
jsonParam = JSONObject.parseObject(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
return jsonParam;
}