(tip:如果是解决disable SerializationFeature.FAIL_ON_EMPTY_BEANS,请先看最后一段,再来前面看)
分享实践过程:
为了这个效果,找了很多博客,但是都不行,最后自己一行一行调试代码,实现这个效果。
这里我分享以下我自己的实践过程。
封装返回信息中,数据为空想实现"data":{}效果
{
"message": "查找不到用户信息",
"data": {}
}
我自己实现这个效果的核心实现代码:
( tip:处理disable SerializationFeature.FAIL_ON_EMPTY_BEANS的代码也是这个,定义完后使用objectMapper().writeValueAsString()即可 )
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
此时,使用objectMapper().writeValueAsString(返回消息体),"data":{}的效果已经实现了
我自己的代码
统一返回消息体中代码如下
private String message;
private Object data;
public MapResponseEntity(String message) {
this.message = message;
this.data = new Object();
}
核心代码
日志记录返回参数,我使用了ObjectMapper序列化返回参数,记录到日志中
sb.append("返回值: ").append(objectMapper().writeValueAsString(result)).append("\n");
其他方法:(我自己试都不行)
1、统一返回消息体实体类上添加
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
2、禁用属性 (这个会报异常InvalidDefinitionException)
我要使用ObjectMapper序列化返回对象,记录日志,代码如下:
ObjectMapper mapper = new ObjectMapper();
String reqJson = mapper.writeValueAsString(new Object());
但是当实体类中data=null时,会报异常InvalidDefinitionException.....SerializationFeature.FAIL_ON_EMPTY_BEANS
大致意思就是没有可序列化的对象属性需要禁用SerializationFeature.FAIL_ON_EMPTY_BEANS这个属性为false。
禁用后
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
String reqJson = mapper.writeValueAsString(new Object());
最坑的来了,没有写第二行禁用属性前,报错信息会提示你具体哪一行报错。写了之后,报错信息时一模一样的,而且不显示是你哪一行报错
并且返回消息中还是"data"=null