我正在构建一个spring应用程序 @RestController
,例如:
@RestController
@RequestMapping(value = "/master")
public class MyController {
@Autowired
private MyService service;
@PostMapping("/call")
public ResponseEntity<Boolean> apiCall(@RequestBody MyDTO myDto) { ;
return new ResponseEntity<Boolean>(service.apiCall(myDto), OK);
}
}
以及请求对象:
public class MyDTO {
@JsonProperty("emp_number")
private long empNumber;
@JsonProperty("office_id")
private long officeId;
// ....constructors, etc.
}
在我想要的请求中 officeId
不为空。
到目前为止我已经试着在 officeId
字段为:
@com.fasterxml.jackson.databind.annotation.JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonProperty(required = true)
@javax.validation.constraints.NotNull
但在请求json中,即使我错过了 office_id
,它没有抛出任何错误。
我错过了什么?
2条答案
按热度按时间bmvo0sr51#
可能是在您的情况下,您正在反序列化请求,并且构造函数引用的缺少的原语属性被分配了一个默认值
java默认值
您可以尝试为mydto使用相应的长 Package 对象,而不是原语,或者为原语使用反序列化功能fail\u on \u null\u
atmip9wb2#
必须将类型从primitive更改为wrapper,否则将考虑默认值0,验证将通过。
用注解mydto
@Valid
注解。当spring boot发现一个带有@valid注解的参数时,它会自动引导默认的jsr 380实现hibernate validator并验证该参数。
从这里开始
请将以下依赖项添加到pom.xml
附言:我对回应结构做了一些小的调整,看看回应中的错误
整个代码如下: