jackson用法浅析

对象
名称属性1描述1属性2描述2属性3描述3
Userusername用户名password密码createDate创建时间
UserVOusername用户名
1、DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES

该特性决定了当遇到未知属性(没有映射到属性,没有任何setter或者任何可以处理它的handler),是否应该抛出一个JsonMappingException异常。这个特性一般式所有其他处理方法对未知属性处理都无效后才被尝试,属性保留未处理状态。默认情况下,该设置是被打开的。

  • 应用场景

当从User(三个属性)josn字符串转换为UserVO(一个属性)时,即User中的属性在UserVO中没有映射到,没有任何setter或者任何可以处理它的handler。

  • 解决方案
 public class JacksonDemo {
    private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    static {
        OBJECT_MAPPER.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

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

    public static void test_FAIL_ON_UNKNOWN_PROPERTIES() throws IOException {
        User user = new User();
        user.setUsername("小明");
        user.setPassword("123456");
        String json = OBJECT_MAPPER.writeValueAsString(user);
        System.out.println(json);

        UserVO userVO = OBJECT_MAPPER.readValue(json, UserVO.class);
        System.out.println(userVO.getUsername());
    }
}

运行通过。当在开发过程中如果有转换类与被转换类不一致的情况,可以通过设置DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES为false来使运行通过,当然如果你的需求是当属性不一致时要报错,那么使用默认配置即可。

2、JsonParser.Feature.ALLOW_SINGLE_QUOTES

该特性决定parser是否允许单引号来包住属性名称和字符串值。注意:默认下,该属性也是关闭的。需要设置JsonParser.Feature.ALLOW_SINGLE_QUOTES为true。

  • 应用场景

如下json字符串{‘username’:’小明’},其中属性名称和值由单引号包住时。

  • 解决方案
public class JacksonDemo {
    private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    static {
        OBJECT_MAPPER.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
    }

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

    public static void test_ALLOW_SINGLE_QUOTES() throws IOException {
        String json = "{'username':'小明'}";
        System.out.println(json);

        UserVO userVO = OBJECT_MAPPER.readValue(json, UserVO.class);
        System.out.println(userVO.getUsername());
    }
}
3、SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS

是否允许一个类型没有注解表明打算被序列化。默认true,抛出一个异常;否则序列化一个空对象,比如没有任何属性。

  • 应用场景

当User对象中username和password属性都添加了@JsonIgnore注解,且你希望writeValueAsString(user)顺利调用时。

  • 解决方案
public class JacksonDemo {
    private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    static {
        OBJECT_MAPPER.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
    }

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

    public static void test_FAIL_ON_EMPTY_BEANS() throws IOException {
        User user = new User();
        user.setUsername("小明");
        user.setPassword("123456");
        String json = OBJECT_MAPPER.writeValueAsString(user);
        System.out.println(json);
    }
}
4、OBJECT_MAPPER.setDateFormat()

objcetMapper中注册自己的日期转换工具

  • 应用场景

转换如下{“username”:”小明”,”password”:”123456”,”createDate”:”2017-04-08 10:38:00”}josn时,需要对其中createDate进行日期转换处理时。

  • 解决方案
public class JacksonDemo {
    private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();

    static {
        OBJECT_MAPPER.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
    }

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

    public static void test_setDateFormat() throws IOException {
        String json = "{\"username\":\"小明\",\"password\":\"123456\",\"createDate\":\"2017-04-08 10:38:00\"}";
        System.out.println(json);

        User user = OBJECT_MAPPER.readValue(json, User.class);
        System.out.println(user.getCreateDate());
    }
}

参考:http://blog.csdn.net/kobejayandy/article/details/45869861

参考:http://www.cnblogs.com/shiddong/p/5580167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值