Fork me on GitHub

Post请求接收单个参数

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类的解析自定义注解功能

posted @ 2022-08-08 11:05  秋夜雨巷  阅读(4978)  评论(0编辑  收藏  举报