在Spring中使用@RequestBody
注释时,如何在REST API调用中使body可选?
使用Spring的最新版本,如果使用@RequestBody
注释,它会使客户端始终发送正文,而不会使其成为可选项。
我试过了@RequestBody (required=false)
,但那并没有起作用&我的请求仍然是空的。
如何在不强制要求的情况下将请求转换为正确的必需对象?
例如:
@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
// ...
}
在这里,我想使用POST添加员工,但没有正文。我怎么做?春季最新版本引发错误"身体缺失"如果我送空身......
答案 0 :(得分:33)
@RequestBody (required=false)
并且请求仍为空。也许你可以详细说明&举个例子。
@Mike,可能你可以尝试使用另一个能满足你目的的独立转换器。
注意:我注意到Spring v4.1.6&迈克可能正在使用它,因为他提到他正在使用最新版本。
答案 1 :(得分:8)
我猜您使用的是版本高于3.2的弹簧版本。 @RequestBody should have a required parameter to allow a request body to be optional
查看以下链接 Spring @RequestBody Anotation
@RequestBody
正文需要和参数必需,默认情况下为true。将其指定为false将有助于您
公共摘要布尔需要
是否需要身体内容。 如果没有正文内容,默认为真,会导致抛出异常。如果您希望在正文内容为空时传递null,则将其切换为false。
答案 2 :(得分:0)
您可以使用java.util.Optional
:
@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Optional<Employee> employee){
// ...
}
答案 3 :(得分:0)
我使用 @RequestBody(required = false)
解决了这个问题,请参见以下示例:
@PutMapping("approve/{id}")
public void approve(@PathVariable("id") Long id, @RequestBody(required = false) DemoObject demo) {
log.info("demo == null -> " + (demo == null));
}
注意:在前端应用程序中,我放置了空值
this.http.put('approve/' + id, null)
.then((response) => {
...
})
.catch(error => {
...
})