Java DTO数据响应回前端时JSON对象中多出一些未知属性
来源:互联网 发布:淘宝刷评论免费送衣服 编辑:程序博客网 时间:2024/06/01 10:46
1. 问题描述
项目过程中,测试那边反映ResponseBody返回前端的JSON中,某个DTO多出了一个属性"empty : false"
,DTO如下:
public class Description { private String name; private String dosage; private String route; private String strength; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDosage() { return dosage; } public void setDosage(String dosage) { this.dosage = dosage; } public String getRoute() { return route; } public void setRoute(String route) { this.route = route; } public String getStrength() { return strength; } public void setStrength(String strength) { this.strength = strength; } public boolean isEmpty() { return this.dosage == null && this.strength == null && this.name == null && this.route == null; }}
2. 问题分析
- DTO中没有这个empty属性。
- 但是有一个boolean isEmpty()方法。
显而易见,jackson在将对象转化成JSON字符串的过程中,调用了isEmpty(),并且从方法名中解析出了empty属性。
3. 解决
解决很简单,把isEmpty()方法去掉或者改名不要使用is和get开头的名字,或者使用@JsonIgnore注解这个方法。其实在DTO中出现一个isEmpty()方法本来就不太好,但由于DTO不是标准JavaBean,暂且先这样。
4. 思考
JavaBean的规范中有明确规定,对于boolean类型的属性,其getter可以使用get开头和is开头的方法,从上面的问题来看,springMVC的jackson在将一个对象转化成JSON字符串时,并不会检查属性是否存在,而是直接调用getter。
把isEmpty()改成getEmpty()同样会多出一个empty属性,但是jackson会检查getter的返回类型,如果这个getter的返回值是非boolean类型,却用is开头,这样是不会被jackson调用的。以上可以自己试验一下。
这也能解释为什么JavaBean规定必须有无参构造方法和与成员属性相关的setter和getter方法,而且还尽量不要在JavaBean中添加其它的方法。
阅读全文
0 0
- Java DTO数据响应回前端时JSON对象中多出一些未知属性
- Java从List中直接读取未知对象属性数据
- json数据@RequestBody转DTO
- json数据与JAVA数据的转换 jsonJavaBean.netApache 自己编写了一个工具类,处理页面提交json格式数据到后台,再进行处理成JAVA对象数据 1、DTO:Data T
- java对象转换为json格式并传送数据到前端
- J2EE中数据对象的一些概念,比如DTO,VO,BO,ORM,POJO等相关注解
- JSON后端向前端传递数据 JAVA
- java对象转json数据
- java代码解析json对象获取json对象属性值
- java 组装json对象,并获取json对象中的属性
- java一些对象概念扫盲帖(DO VO DTO PO)
- java 对象转JSON 属性为空
- js 获得未知object对象的属性
- IOS遍历未知对象属性、函数
- IOS遍历未知对象属性、函数
- IOS遍历未知对象属性、函数
- IOS遍历未知对象属性、函数
- IOS遍历未知对象属性、函数
- Android 开发笔记 2:Ubuntu 14.04 中安装Android Studio开发环境
- 关于JDK8 Stream
- spring 中常用的两种事务配置方式以及事务的传播性、隔离级别
- Unity动画系统学习笔记<一>
- node作为中间层的一些看法
- Java DTO数据响应回前端时JSON对象中多出一些未知属性
- 阿里云分析性数据库的发展历史
- cron计划任务解析及相关实例
- WPF背景颜色变化的动画
- 客户端xshell连接linux中vim不能正常使用小键盘的问题
- 对Fragment加载的理解
- 2018届校招面试知识点
- logistic回归
- 一 蓝牙概述