jackSon中@JacksonInject 注解详解

x33g5p2x  于2021-12-25 转载在 其他  
字(1.2k)|赞(0)|评价(0)|浏览(380)

前言

假设json字段有一些缺少的属性,抓换成实体类的时候没有的属性将为null,但是我们在某些需求当中需要将为null的属性都设置为默认值,这时候我们就可以用到这个注解了,它的功能就是在反序列化的时候将没有的字段设置为我们设置好的默认值,下面就看下他的用法吧。

@JacksonInject用法

//value 相当于id,之后会用到,
//userInput为FALSE的时候是属性值不覆盖默认值,相当于定死了这个字段的值。默认为true是会覆盖
//@JacksonInject("defaultUsername")如果我们就是为了值为空的时候注入默认的值,这么写就行了
@JacksonInject(value= "defaultUsername", useInput= OptBoolean.FALSE)
private String username;

测试代码

public static void main(String[] args) throws IOException {

        ObjectMapper mapper = new ObjectMapper();
        InjectableValues.Std injectableValues = new InjectableValues.Std();
        //如果username字段为空,那么就默认是小明
        injectableValues.addValue("defaultUsername","小明");
        //也可以使用类型参数,代表凡是加了注解的String类型字段,为空的时候都是默认值“--”,
        //这样就直接在String类型属性上面加注解就行了,不用在写value值了。
        //injectableValues.addValue(String.class,"--");
        mapper.setInjectableValues(injectableValues);
        String jsonValue = "{}";
        User user = mapper.readValue(jsonValue, User.class);
        System.out.println(user);
    }

结果

User{username='小明', password='null', age=null}

当然我们也可以在注解上这么写,这样子凡是加了注解的String的类型的字段,在反序列化的时候都有了默认值了。

@JacksonInject
private String username;
InjectableValues.Std injectableValues = new InjectableValues.Std();
        injectableValues.addValue(String.class,"nullValue");

相关文章