Jackson配置

1.默认jackjson

除了 Spring Boot 必须自带的 parent 依赖外,仅仅只需要加入这个 spring-boot-starter-web 包即可,它会自动包含所有 JSON 处理的包。全局的 json 输出都是使用这个配置。只要 controller 添加注解@RestController或者@ResponseBody 即可。

1557983539415.png

2.entity
public class User {
    @JsonProperty("user-name")
    private String userName;
    private Long id;
    
    private Integer age;
    
    @JsonIgnore
    private String address;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String memo;
    // get set 略
}
  • @JsonProperty: 可用来自定义属性标签名称;有时候 Idea 插件 json 生成 bean,有些属性比较特别,比如大写字母开头,就需要使用这个注解来特殊声明,否则无法识别。

  • @JsonIgnore: 可用来忽略不想输出某个属性的标签;

  • @JsonInclude: 可用来动态包含属性的标签,如可以不包含为 null 值的属性;

Fastjson全局设置

1.引用依赖
<!--引入fastjson依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.41</version>
</dependency>
2.增加配置
@Configuration
public class FastJsonConfiguration extends WebMvcConfigurerAdapter
{
	//修改自定义消息转换器
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //调用父类的配置
        super.configureMessageConverters(converters);
        //创建fastJson消息转换器
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        //创建配置类
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //修改配置返回内容的过滤
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.DisableCircularReferenceDetect,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteNullStringAsEmpty
        );
        fastConverter.setFastJsonConfig(fastJsonConfig);
        //将fastjson添加到视图消息转换器列表内
        converters.add(fastConverter);
    }
}

具体设置:

FastJson SerializerFeatures

WriteNullListAsEmpty :List字段如果为null,输出为[],而非null

WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null

WriteMapNullValue:是否输出值为null的字段,默认为false。

WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null

DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)

使用抽象类作为入参反序列化

解决方案:

1.使用 Map 进行接受,再手动转换一次

2.使用 Jackson 的注解 @JsonTypeInfo @JsonSubTypes,指定某个值作为判断,转换为某个实现类。

property 指定字段值,不支持层级,只能当前一级如 type ,然后 @JsonSubTypes.Type 的name指的是碰到具体的属性才转换具体的类。

@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", visible = true)
@JsonSubTypes({@JsonSubTypes.Type(value = InputPageModel.class, name = "input")
					  , @JsonSubTypes.Type(value = NumberPageModel.class, name = "number")})
public abstract class Page {
	private String type;
	private String name;
}

上次更新时间: 2024/5/7 05:59:02