Spring @RequestBody注解 和 @RequestMapping注解 header 传参的区别
一、前言
近期项目开发中,通用的处理方法是:前端以json形式传参,后端的SpringMVC接收json参数,映射倒java bean中,再进行处理。 遇到一个问题,有些接口限制了 @RequestMapping 的header 属性为json类型,有的没有限制,那么这个header属性是否要设置呢?
@RequestMapping(value = "/", headers = {"Content-Type=" + MediaType.APPLICATION_JSON_UTF8_VALUE})
json传参是否和header有关系呢? 由于json传参需要使用 @RequestBody 注解 , 则以 是否有 @RequestBody 和 是否有header属性 设置,组合起来 四种情况,进行测试。
- 无 @RequestBody注解, 无 header
- 无 @RequestBody注解, 有 header
- 有 @RequestBody注解, 无 header
- 有 @RequestBody注解, 有 header
二、代码演示
1、按照 是否有 @RequestBody 和 是否有header属性 设置 , 四种组合情况,代码如下:
/**
* Description: 无 @Req注解, 无 header
* <br> 结论: 前端json传参,无法接收到
* @param userParam
* @return com.runcode.springboottourist.entity.UserParam
* @version v1.0
* @author wu
* @date 2023/2/3 10:30
*/
@RequestMapping("/reqNoHeaderNo")
public UserParam reqNoHeaderNo(UserParam userParam){
log.warn("无 @Req注解, 无 header :{}", JSON.toJSONString(userParam));
return userParam;
}
/**
* Description: 无 @Req注解, 有 header
* <br> 结论: 前端json传参,无法接收到
* @param userParam
* @return com.runcode.springboottourist.entity.UserParam
* @version v1.0
* @author wu
* @date 2023/2/3 10:34
*/
@RequestMapping(value = "/reqNoHeaderYes", headers = {"Content-Type=" + MediaType.APPLICATION_JSON_UTF8_VALUE})
public UserParam reqNoHeaderYes(UserParam userParam){
log.warn("无 @Req注解, 有 header :{}", JSON.toJSONString(userParam));
return userParam;
}
/**
* Description: 有 @Req注解, 无 header
* <br> 结论: 前端json传参,可以 接收到
* @return com.runcode.springboottourist.entity.UserParam
* @version v1.0
* @author wu
* @date 2023/2/3 10:36
*/
@RequestMapping(value = "/reqYesHeaderNo")
public UserParam reqYesHeaderNo(@RequestBody UserParam userParam){
log.warn("有 @Req注解, 无 header :{}", JSON.toJSONString(userParam));
return userParam;
}
/**
* Description: 有 @Req注解, 有 header
* <br> 结论: 前端json传参,可以 接收到
* @param userParam
* @return com.runcode.springboottourist.entity.UserParam
* @version v1.0
* @author wu
* @date 2023/2/3 10:37
*/
@RequestMapping(value = "/reqYesHeaderYes", headers = {"Content-Type=" + MediaType.APPLICATION_JSON_UTF8_VALUE})
public UserParam reqYesHeaderYes(@RequestBody UserParam userParam){
log.warn("无 @Req注解, 有 header :{}", JSON.toJSONString(userParam));
return userParam;
}
2、使用postman 以json形式传参,分别测试四个接口,结果如下:
1. 无法接收到参数
2. 无法接收到参数
3. 正常接收到参数
4. 正常接收到参数
三、总结
1、前端以json形式传参,使用 @RequestBody 注解,即可接收到参数 ;与header属性是否设置是无关的。
2、深度的学习: @RequestBody 实现json序列化的原理 ; @RequestMapping 各个属性的作用。 请自行了解,谢谢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)