Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在最新的SpringV4中使用@RequestBody和可选的body_Java_Spring_Spring Mvc_Httprequest - Fatal编程技术网

Java 在最新的SpringV4中使用@RequestBody和可选的body

Java 在最新的SpringV4中使用@RequestBody和可选的body,java,spring,spring-mvc,httprequest,Java,Spring,Spring Mvc,Httprequest,在Spring中使用@RequestBody注释时,如何使主体在RESTAPI调用中成为可选的 在Spring的最新版本中,如果您使用@RequestBody注释,它会使客户机始终发送body,而不必选择它 我尝试了@RequestBody(required=false),但没有成功&我的请求仍然是空的 我如何在不强制执行正文的情况下将请求转换为适当的必需对象 例如: @RequestMapping(value="/add/employee", method=RequestMethod.POST

在Spring中使用
@RequestBody
注释时,如何使主体在RESTAPI调用中成为可选的

在Spring的最新版本中,如果您使用
@RequestBody
注释,它会使客户机始终发送body,而不必选择它

我尝试了
@RequestBody(required=false)
,但没有成功&我的请求仍然是空的

我如何在不强制执行正文的情况下将请求转换为适当的必需对象

例如:

@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
    // ...
}

在这里,我想添加使用POST但没有正文的员工。我该怎么做?如果我发送空正文,Spring最新版本将抛出错误“body missing”…

我猜您使用的是3.2以上的Spring版本,因为该版本存在问题

看看下面的链接

@RequestBody
Body接受和参数必需,默认情况下为true。将其指定为false将对您有所帮助

公共摘要需要布尔值

是否需要正文内容。 默认值为true,在没有正文内容的情况下引发异常。如果希望在正文内容为null时传递null,请将此选项切换为false


@桑托什,我不确定你指的是哪一个必要的论点。Mike已经提到他尝试使用
@RequestBody(required=false)
,但请求仍然为空。也许你可以详细阐述一下,并举例说明

@迈克,也许你可以尝试另一个单独的转换器来满足你的需要


注意:我注意到SpringV4.1.6存在同样的问题&Mike可能正在使用它,因为他提到他正在使用最新版本。

您可以使用
java.util.Optional

@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Optional<Employee> employee){
    // ...
}
@RequestMapping(value=“/add/employee”,method=RequestMethod.POST)
public void addEmployee(@RequestBody可选员工){
// ...
}

我通过使用
@RequestBody(required=false)
解决了这个问题,请参见以下示例:

@PutMapping("approve/{id}")
public void approve(@PathVariable("id") Long id, @RequestBody(required = false) DemoObject demo) {
  log.info("demo == null -> " + (demo == null));
}
NB:在前端应用程序中,我输入空值

this.http.put('approve/' + id, null)
.then((response) => {
  ...
})
.catch(error => {
  ...
})

当使用字符串作为RequestBody(required=false)时,默认值不是null,而是{}。不知道为什么,但花费了我一些时间,我想我会分享。不建议对参数使用可选类型,intellij给出消息see:。