![](/img/trans.png)
[英]Spring boot @ExceptionHandler not responding with custom response
[英]Custom ExceptionHandler for validation in Spring Boot?
在一個 Spring Boot 應用程序中,我在我的 Spring Boot 應用程序中實現了一個自定義異常處理,如本例所示,並拋出NoSuchElementFoundException
沒有任何問題,如下所示:
public EmployeeDto findByEmail(String email) {
return employeeRepository.findByEmail(email)
.map(EmployeeDto::new)
.orElseThrow(() -> new NoSuchElementFoundException(NO_ITEM_FOUND));
}
但是,我還添加了另一個自定義異常類,並在我的 Global 類中定義了它的處理程序,如下所示:
@ExceptionHandler(NotValidFormatException.class)
@ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
public ResponseEntity<Object> handleNotValidFormatException(NotValidFormatException ex, WebRequest request) {
log.error("Invalid format. Only csv files are allowed.", ex);
return buildErrorResponse(ex, HttpStatus.UNPROCESSABLE_ENTITY, request);
}
這是我的服務方法,如果文件不是有效類型,我將在其中拋出此異常:
public void create(MultipartFile file) throws Exception {
if (CsvHelper.hasCsvFormat(file)) {
throw new NotValidFormatException("Not valid type");
}
// ...
}
現在,我不確定應該在哪里檢查有效性:
我應該通過我的 Util 類中的靜態方法來檢查它嗎?
或實施此處提到的自定義驗證器? 在這種情況下,我不確定是否還需要自定義異常類。 任何想法?
創建驗證器幾乎總是一個好主意,因為對這個服務方法進行單元測試更簡單。
public void create(MultipartFile file) throws Exception {
fileValidator.validate(file);
}
FileValidator
創建單元測試fileValidator.validate(eq(file))
方法以拋出NotValidFormatException
並在調用create(file)
時斷言您有異常。fileValidator
執行任何操作。 請記住,有時最好不要使用驗證器來簡化代碼。 例如,如果您需要驗證id
。
筆記
我不想為每個驗證檢查創建異常。 只是為了對所有驗證錯誤使用一個通用類。 您可以使用這種方法返回多個驗證錯誤。
public class ValidationException extends ServiceException {
public ValidationException(ErrorResponseItem item) {
this(Collections.singletonList(item));
}
public ValidationException(List<ErrorResponseItem> items) {
super(HttpStatus.UNPROCESSABLE_ENTITY, items);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.