當我將接收到的物件決議為 DTO 時,我想拋出一個例外,并且在決議 DTO 中我標記為必需的任何欄位是否具有空值時,我想拋出一個帶有 400 回應的例外。
我有一個這樣的控制器,
public class StandardController(@RequestBody Object body) {
ModelMapper modelMapper = new ModelMapper();
try {
CustomDTO customDto = modelMapper.map(body, CustomDTO.class);
} catch (Exception e) {
//throw exception with a message required properties are missing with 400 response`
}
}
我在我的 CustomDTO 中標記了一些屬性,required = true如JsonProperty. 但是當我測驗控制器時,它不會拋出例外。
知道如何實作這種情況嗎?
uj5u.com熱心網友回復:
您需要直接從用戶那里接收 CustomDto。因為 DTO 是用來傳輸的。如果您收到來自用戶的自定義 dto,那么您可以在物件上添加驗證。
只是一個例子
@Data
public class ClassDto {
private Long classId;
@NotNull
@Size(max = 200)
private String className;
private Double classAdmissionFee;
}
查看@NotNull 和@Size 注釋。它們經過 javax 驗證。
現在,在您的 DTO 完全配置后一次。你需要這樣做:
public class StandardController(@Valid @RequestBody CustomDTO customDto) {
}
注意@Valid 注釋。當任何 DTO 約束失敗時,spring 將拋出 MethodArgumentNotValidException。所以你需要通過@ControllerAdvice 或者擴展ResponseEntityExceptionHandler 來處理例外。
這是您案例的一篇不錯的文章鏈接: https ://www.javaguides.net/2021/04/spring-boot-dto-validation-example.html
uj5u.com熱心網友回復:
在 Spring Boot 控制器中,您可以使用ResponseStatusException。像這樣的東西應該作業:
try {
//Your Code here
} catch(Exception e) {
throw new ResponseStatusException( HttpStatus.BAD_REQUEST, "Required properties are missing");
}
此外,如果您想了解有關這種例外處理方式的更多資訊,可以查看Baeldung 上的這篇文章。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/449445.html
