@JsonAutoDetect应用——实体类都是大写的,但是后端传给前端的时候,依然是小写
问题:同事定义的实体类都是大写的,但是传给客户端的时候,依然是小写。1、实体类dto公司使用Springboot进行开发,里面默认使用了jackson进行序列化。但是序列化的过程中一直报错,因此记录一下。 ⒈jackson默认大小写敏感,且首字母转小写 在类上添加一下注解即可 @JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibil
问题:同事定义的实体类都是大写的,但是传给客户端的时候,依然是小写。
Springboot开发
1、实体类dto
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.util.List;
@Data
public class QueryDto {
/**
* 分级开关状态
*/
@JSONField(name = "FJKGZT")
private String FJKGZT;
/**
* 同步开关状态
*/
@JSONField(name = "TBKGZT")
private String TBKGZT;
/**
* 开关状态字典信息
*/
@JSONField(name = "KGZTZDXX")
private List<DictDataVo> KGZTZDXX;
}
2、具体实现代码

3、通过postman工具,查询的结果如下

解决方法有两种:
第一种:最后行通过JSON转,将dto实体类转成String,再将其转成Object对象。(效果可以达到,但不建议使用)
return CallResultUtil.success(JSON.parseObject(JSON.toJSONString(dto)));
第二种:在类上添加一下注解即可
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY, getterVisibility=JsonAutoDetect.Visibility.NONE)
包含所有field属性并设为可见:@JsonAutoDetect(fieldVisibility=Visibility.ANY
取消getter方法的自动检测:@JsonAutoDetect(getterVisibility=Visibility.NONE
@JsonAutoDetect注解是Jackson包下的。
jackson的自动检测机制
jackson允许使用任意的构造方法或工厂方法来构造实例
使用@JsonAutoDetect(作用在类上)来开启/禁止自动检测
fieldVisibility:字段的可见级别
ANY:任何级别的字段都可以自动识别
getterVisibility:get方法的可见级别
NONE:所有字段都不可以自动识别
NON_PRIVATE:非private修饰的字段可以自动识别
PROTECTED_AND_PUBLIC:被protected和public修饰的字段可以被自动识别
PUBLIC_ONLY:只有被public修饰的字段才可以被自动识别
DEFAULT:同PUBLIC_ONLY
jackson默认的字段属性发现规则如下:
所有被public修饰的字段->所有被public修饰的getter->所有被public修饰的setter
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)