@ControllerAdvice 接收String时 cannot be cast to java.lang.String

 @RequestMapping("/strTest")
  public Object strTest() {
    return "jiang";
  }
@RequestMapping("/test")
  public Object test() {
    return System.currentTimeMillis();
  }

如上两个接口,返回string类型的接口在会报ClassCastException :Object cannot be cast to java.lang.String 的错误

@ControllerAdvice
public class ResultHandle implements ResponseBodyAdvice<Object> {

  private static final Logger LOGGER = LoggerFactory.getLogger(ResultHandle.class);

  @Override
  public boolean supports(MethodParameter methodParameter,
                          Class<? extends HttpMessageConverter<?>> aClass) {
    LOGGER.info("methodName = ", methodParameter.getMethod().getName());
    return true;
  }

  @Nullable
  @Override
  public Object beforeBodyWrite(@Nullable Object o, MethodParameter methodParameter,
                                MediaType mediaType,
                                Class<? extends HttpMessageConverter<?>> aClass,
                                ServerHttpRequest serverHttpRequest,
                                ServerHttpResponse serverHttpResponse) {
    String requestId = CommonUtils.getRequestId();
    return ViewWrapResult.createSuccess(requestId, o);
  }
}

谷歌搜索后搜到如下结果,https://stackoverflow.com/questions/44121648/controlleradvice-responsebodyadvice-failed-to-enclose-a-string-response
但是WebMvcConfigurerAdapter已经被标注@Deprecated,看注释更改为如下代码,亲测有效,我使用的是FastJson,但是仍然是使用MappingJackson2HttpMessageConverter,亲测有效,但是不是非常清楚报错的原因,请大神指教

@Configuration
public class WebConfig implements WebMvcConfigurer {

  @Override
  public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(0, new MappingJackson2HttpMessageConverter());
  }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容