对象
名称 | 属性1 | 描述1 | 属性2 | 描述2 | 属性3 | 描述3 |
---|---|---|---|---|---|---|
User | username | 用户名 | password | 密码 | createDate | 创建时间 |
UserVO | username | 用户名 | … | … | … | … |
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