Post请求接收单个参数
原创
©著作权归作者所有:来自51CTO博客作者秋夜雨巷的原创作品,请联系作者获取转载授权,否则将追究法律责任
application/json传输单个参数
前端开发人员一般都喜欢使用application/json像后端传输参数,当使用根据id删除这种业务时只有一个id参数,SpringMvc并没有提供解析json格式单一参数的注解。
尴尬的点: 后端不想写一个只有一个字段的实体类;前端请求的接口一会用json格式一会用form表单提交。
HttpServletRequest获取requestbody(无框架)
通过HttpServletRequest获取requestbody部分,然后通过第三方包进行json解析
//通过HttpServletRequest获取requestbody部分,然后通过json解析
@PostMapping("/delete")
public ApiResponse delete(HttpServletRequest request) {
/*通过request获取request请求的body部分*/
StringBuilder requestBody_sb = new StringBuilder();
String tempStr;
try {
BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), "UTF-8"));
while ((tempStr = streamReader.readLine()) != null) {
requestBody_sb.append(tempStr);
}
} catch (IOException e) {
e.printStackTrace();
}
String requestBody_str = requestBody_sb.toString();
/*通过HttpServletRequest获取的requestbody字符串进行解析*/
JSONObject paramsJSONObject = JSONObject.parseObject(requestBody_str);
String id = paramsJSONObject.getString("id");
if (id == null) {
throw RuntimeException("参数id为null");
}
service.deleteById(id);
return ApiResponse.success();
}
requestbody封装为String(SpringMVC)
//通过springmvc将requestbody部分封装到String中
@PostMapping("/delete")
public ApiResponse delete(@RequestBody String params){
JSONObject paramsJSONObject = JSONObject.parseObject(params);
String id = paramsJSONObject.getString("id");
if (id == null) {
throw RuntimeException("参数id为null");
}
service.deleteById(id);
return ApiResponse.success();
}
requestbody封装为Map(SpringMVC)
前后端改动最小的方案。
//通过springmvc将requestbody部分封装到Map中
@PostMapping("/delete")
public ApiResponse delete(@RequestBody Map<String,String> params){
String id = params.get("id");
if (id == null) {
throw RuntimeException("参数id为null");
}
service.deleteById(id);
return ApiResponse.success();
}
requestbody封装为Bean(SpringMVC)
我们最常用的一个封包方式,写一个实体,但是问题就是一个字段时写一个实体很麻烦。
自定义注解
自定义注解,在实现WebMvcConfigurer自定义配置类中添加实现HandlerMethodArgumentResolver类的解析自定义注解功能
如果这篇文章对你有用,麻烦关注一下本人微信公众号~
