JAVA实现“data”:{}效果 || disable SerializationFeature.FAIL_ON_EMPTY_BEANS的坑

(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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值