最近,某同事遇到如下怪异问题,程序编译没问题,启动没问题,从controller调用到service,service里的方法正常返回,controller也能正常接收返回参数,但controller将返回参数json化后,返回给前端的时候,报异常了。
具体错误信息如下:
异常类 →
"exception":"org.springframework.http.converter.HttpMessageNotWritableException"
详细异常错误信息 →
"message":"Could not write content: No serializer found for class cn.*.*.search.dto.SearchedNotice and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: cn.*.*.*.notice.search.dto.OilPaging[\"articles\"]->java.util.ArrayList[0]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class
最根本原因 →
nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class
JSON化失败原因 →
to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS
原因已经很明确了,OilPaging该DTO类有的属性是null,导致json化得时候,fasterxml -jackson 将对象转换为json时报错了。
解决方法很简单,找到无法json化的对象,在可能为空的字段上设置@JsonSerialize(include=Inclusion.NON_EMPTY)
意思就是:假入该属性为null,则忽略。
解决
报错org.springframework.http.converter.
HttpMessageNotWritableException
: Could not write
JSON
如果是中途接手一个项目的小伙伴要注意了,这个项目是不是在外层封装了统一的
返回
体对象,这样也会导致,即使这个下载导出接口定义成为void了,但是最终的
返回
依然会被封装一次。因此我们需要在统一
返回
的地方排除掉content为application/x-download的response。分析了一下报错信息,下载导出接口指定了content-type “application/x-download”的方法不应该有
返回
值
,也就是说方法
返回
值
类型应该是void。但是改成void以后,还是会出现相同的报错信息。
先把完成的报错(应该算是警告日志)贴出来:
Resolved [org.springframework.http.converter.
HttpMessageNotWritableException
: No converter found for return value of type: class com.test.dto.ResultBean]
如果日志类似可以继续往下看。
1. 问题原因和处理
先还原事故现场(只展示核心问题代码)
接口层代码:
@Rest
Controller
集成Spring Security权限框架后出现无法写入
JSON
的问题
解决
,报错内容为:Resolved [org.springframework.http.converter.
HttpMessageNotWritableException
: Could not write
JSON
: A granted authority textual representation is required; nested exception ......
HttpMessageNotWritableException
: Could not write
JSON
: [no message for java.lang.ArrayStoreException]前言一、问题描述二、实体类如下三、
解决
方式总结
最近做一个需求,几个表单的增删改查功能。由我和另外一个同事共同完成功能。在使用@Validated和@NotBlank作参数校验时遇到了一个令人头疼的问题
一、问题描述
保存功能的参数校验在本地测试没有任何问题,发布到线上后,就报错
org.sprin
controller
将
返回
参数
json
化
后,
返回
给前端的时候,报
异常
org.springframework.http.converter.
HttpMessageNotWritableException
: Could not write
JSON
: (was java.lang.NullPointerException); nested exception is com.fasterxml.jackson.databind.
Json
MappingException: (was java.lang.NullPo
昨天做多对多的时遇到这个错误,网上找了一大堆,都没有
解决
掉,这个
异常
是说要解析的对象解析不了,就有可能该对象为null了,为了测试,我把数据库的数据都填上去 结果还是报错看来是时候debug下了果然,好多null.....但是那个红色框的什么鬼,不是有数据么接下来去看看 是否时配置的问题好像也没什么东西有问题。。。 不对,原来如此。屌大的人都已经看出来...
org.springframework.http.converter.
HttpMessageNotWritableException
: No converter for xxx with preset Content-Type 'null'
public CommonReturnEntity(String status, Object data) {
this.status = status;
this.data = data;
// 表明某个请求处理结果