在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开始,这个属性只用于创建者属性,以确保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);
}


最新更新