![](/img/trans.png)
[英]Getting HTTP Status 500 ? Internal Server Error while upgrading tomcat 7 to 8
[英]Getting 500 response status (Internal server error) for BAD request
當 null 或沒有值在名為 Entries 的列表中傳遞時,我希望響應狀態為 400 BAD Request。 我創建了一個自定義驗證 @ValidList 來實現這一點。 但是,我得到的不是 400 BAD Request,而是 500 Internal Server Error 響應。 我怎樣才能解決這個問題?
我的 class 結構:
public class RequestAPI{
@PostMapping(value = "/request",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity request(
@Valid @NotNull @RequestBody(required = false) Data data) { }
}
@ValidList
public class Data extends ArrayList<@Valid Entries> { }
public class Entries {
@NotNull
String firstName
@NotNull
String lastName
}
驗證器類:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Constraint(validatedBy = ListValidator.class)
public @interface ValidList {
String message() default "List cannot empty or contain null values";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class ListValidator implements ConstraintValidator<ValidList, List<? extends Object>> {
@Override
public boolean isValid(List<? extends Object> list,
ConstraintValidatorContext context) {
return !(list == null || list.isEmpty() || list.stream().anyMatch(Objects::isNull));
// mark the list invalid is empty or contains any null values.
}
@Override
public void initialize(ValidList constraintAnnotation) {}
很難確定,因為您還沒有共享生成 500 錯誤的堆棧跟蹤,但您可能需要以某種方式處理異常。 假設異常是ConstraintViolationException
,您可以使用@RestControllerAdvice
捕獲異常:
@RestControllerAdvice
public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {ConstraintViolationException.class})
public ResponseEntity<Object> handleApiRequestException(ConstraintViolationException ex) {
logger.error(ex.getMessage(), ex);
// ...handle the exception
return new ResponseEntity<>("Error message body", HttpStatus.BAD_REQUEST);
}
}
Spring Web中的異常處理可以參考文檔https://docs.spring.io/spring-framework/docs/5.3.15/reference/html/web.html#mvc-ann-exceptionhandler
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.