未找到序列化器 返回 ResponseEntity 时出现问题,包括异常

No serializer found Problem returning ResponseEntity including exception

我正在制作 RESTful API 用于练习。 我想要有效检查请求正文并制作 ExceptionHandler.class 如下所示。

  @Override
  @ResponseStatus(HttpStatus.BAD_REQUEST)
  public ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request){

    List<String> errorList = ex
            .getBindingResult()
            .getFieldErrors()
            .stream()
            .map(DefaultMessageSourceResolvable::getDefaultMessage)
            .collect(Collectors.toList());

    ApiResponse apiResponse=new ApiResponse(HttpStatus.BAD_REQUEST, ex.getMessage(), errorList, ex);

    return new ResponseEntity<>(
            apiResponse, HttpStatus.BAD_REQUEST
            );
    }

我在 ResponseEntity<> 中为响应主体制作了 ApiResponse.class

@Data
@Slf4j
public class ApiResponse{

    public HttpStatus status;
    public String msg;
    public List<String> err;
    public Exception ex;

    public ApiResponse(HttpStatus status, String msg, List<String> err, Exception ex){
        this.status=status;
        this.msg=msg;
        this.err=err;
        this.ex=ex;    
        }
}

但是当 MethodArgumentNotValidException 发生时,我得到如下错误...

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.validation.DefaultMessageCodesResolver and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.practice.skillup.restfulapi.dto.ApiResponse["ex"]-

这是什么原因,我该如何解决。 (我只是一个 web 开发初学者,非常感谢能轻松解释)

出现这个问题是因为实体是延迟加载的,而序列化过程是在实体完全加载之前执行的。 Jackson 尝试序列化嵌套对象,但失败了,因为它找到了 JavassistLazyInitializer 而不是普通对象。

根据您的堆栈跟踪,您可以通过将以下配置添加到您的 application.properties 文件来抑制此错误:-

spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false

这只会隐藏错误,不会解决问题。要解决此问题,您可以使用 Jackson 的附加模块来处理 Hibernate 延迟加载。在这里查看更多信息:- Jackson-datatype-hibernate, .