[英]Spring Boot Application Throwing Startup Failed Error When Trying to Run
[英]Throwing error when a particular field is missing or blank when using object mapper in spring boot
如果缺少特定字段或该字段为空白,我正在尝试向我的 DTO 添加验证然后应该抛出一个错误,即特定字段丢失或不存在我正在使用对象映射器来映射字段,例如
StudentDto studentDto = mapper.convertValue(jsonObject, StudentDto.class);
DTO 类
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class StudentDto {
@NotNull(message = "FirstName is null")
@NotBlank(message = "FirstName is missing")
String firstName;
@NotNull(message = "LastName is null")
@NotBlank(message = "LastName is missing")
String lastName;
}
我将从 jsonObject 接收所有值,然后将这些值映射到 DTO。 当特定字段丢失或为空时,应引发错误。但目前我没有收到错误程序成功执行我该怎么做才能实现这一点
使用 Jackson 2.6,您可以使用 required,尽管您必须定义一个使用@JsonCreator
注释的构造函数并为每个字段使用@JsonProperty(required = true)
以强制 Jackson 在 JSON 的缺失字段和空字段上引发异常。
来自文档:
请注意,从 2.6 开始,此属性仅用于 Creator 属性,以确保 JSON 中存在属性值:对于其他属性(使用 setter 或可变字段注入的属性),不执行验证。 将来可能会增加对这些情况的支持。 此属性的状态通过自省公开,其值通常由模式生成器使用,例如用于 JSON 模式的生成器。
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class StudentDto {
String firstName;
String lastName;
@JsonCreator
public StudentDto(@JsonProperty(value = "firstName", required = true) String firstName,//
@JsonProperty(value = "lastName", required = true) String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
在请求中,您必须在手动映射之前验证输入,
在控制器中必须在您的请求正文之前添加@valid
@PostMapping(value = "/addStudent ", produces = MediaType.APPLICATION_JSON_VALUE)
public Response addStudent(@Valid @RequestBody StudentDto refundReq ) {
// your code here ...
}
````
// 还有我的建议是创建一个控制器顾问来处理错误
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
// List<String> details = new ArrayList<>();
for (ObjectError error : ex.getBindingResult().getAllErrors()) {
details.add(error.getDefaultMessage());
logger.error(error.getDefaultMessage());
}
// your code to handel response ....
return new ResponseEntity<>(resp, HttpStatus.OK);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.