是否可以进行集成测试以进行空检查。 我传递了空值。
HttpEntity<Employee> entity = new HttpEntity<Employee>(null, headers);
restTemplate.exchange(url, httpMethod, entity, String.class);
我收到以下错误。
{“时间戳”:“ 2018-10-06T14:33:52.113 + 0000”,“状态”:400,“错误”:“错误请求”,“消息”:“缺少所需的请求正文:”}
@RestController
public class EmployeeController {
@PostMapping(value = "/employee/save", produces = "application/json")
public Employee save(@RequestBody Employee employee){
if(employee==null){
throw new RuntimeException("Employee is null");
}
}
}
class Employee {
}
答案 0 :(得分:0)
@RequestBody(required=false) Employee employee
请尝试使用@RequestBody中的必需选项。
这里的问题是spring mvc中的映射。
required
默认为true,如果没有正文内容,则会引发异常。如果您希望在正文内容为null时传递null,则将其切换为false。
@RequestBody Employee employee
如果employee不为null,则仅处理您的方法的请求。然后,它考虑了正确的映射并将请求传递给此方法并进行处理。因此,此处的check null条件将是不必要的。
答案 1 :(得分:0)
我不确定这是否可行,但是我会说这是一个不好的做法。
根据RFC 7231:
POST方法用于请求源服务器接受 请求中包含的表示形式,作为要由 目标资源。
由于您已经为控制器的PostMapping添加了注释,因此服务器应该有请求正文。我看不到为空或空的请求正文编写集成测试的价值。
如果我们查看HTTP请求结构,
POST /您的URL HTTP / 1.1
主持your_host
内容类型 ... ContentLength ...正文第1行
null和empty有什么区别?
答案 2 :(得分:0)
您可以使用javax验证框架来检查@requestbody是否为空
请使用以下方法:一定会解决您的问题。
Maven Dependency:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
@RestController
public class EmployeeController {
@PostMapping(value = "/employee/save", produces = "application/json")
public Employee save(@NotNull @RequestBody Employee employee){
}
}