簡體   English   中英

獲取 BAD 請求的 500 響應狀態(內部服務器錯誤)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM