有没有办法让RequestParam支持@RequestBody注释选项(例如required = false)?
我通过代码的主要途径是使用POST。但是,我还希望通过浏览器基本的http请求支持基本的GET请求以进行调试。但是,当我尝试这样做时,我得到了415不支持的媒体错误。
答案 0 :(得分:7)
我通过代码的主要途径是使用POST。但是,我还想通过浏览器支持基本的GET请求
为此,请使用method
注释的@RequestMapping
属性,例如
@RequestMapping(value="/myPath", method=RequestMethod.GET)
public String doSomething() {
...
}
@RequestMapping(value="/myPath", method=RequestMethod.POST)
public String doSomething(@RequestBody payload) {
...
}
答案 1 :(得分:6)
@RequestBody现在显然可以在Spring 3.2M1中设置为可选:https://jira.springsource.org/browse/SPR-9239
但是我已经在Spring 3.2M2中对此进行了测试,并且即使在设置required = false之后通过null主体发送异常,而不是通过null。这个问题已得到确认并已得到修复,附表为3.2 RC1
答案 2 :(得分:3)
有没有办法让RequestParam支持@RequestBody注释选项(例如required = false)?
总之,我不相信, 但您可以从输入流手动执行此操作:
@Autowired
private MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter;
RestResponse<String> updateViewingCard(@PathVariable(value = "custome") String customer,
@RequestParam(value = "p1", required = false) String p1,
@RequestParam(value = "p2", required = false) String p2,
// @RequestBody MyPayloadType payload, Can't make this optional
HttpServletRequest request,
HttpServletResponse response) throws... {
MyPayloadType payload = null;
if (0 < request.getContentLength()) {
payload = this.mappingJacksonHttpMessageConverter.getObjectMapper().readValue(request.getInputStream(),
MyPayloadType.class);
}
答案 3 :(得分:0)
是的,可以。在Spring 4或Spring Boot 1.5中,您可以通过以下方式进行操作:
@PostMapping("/error-report")
public String errorReport(@RequestBody(required = false) ErrorReportModel errorReportModel) {
// YOUR LOGIC
return "page-to-return";
}