依赖
<!--jackson依赖--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.11.0</version> </dependency>enable和disable方法则直接启用和禁用相应属性,推荐使用后面两个方法。
// 美化输出 mapper.enable(SerializationFeature.INDENT_OUTPUT); // 允许序列化空的POJO类 // (否则会抛出异常) mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); // 把java.util.Date, Calendar输出为数字(时间戳) mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // 在遇到未知属性的时候不抛出异常 mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); // 强制JSON 空字符串("")转换为null对象值: mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT); // 在JSON中允许C/C++ 样式的注释(非标准,默认禁用) mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true); // 允许没有引号的字段名(非标准) mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); // 允许单引号(非标准) mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); // 强制转义非ASCII字符 mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true); // 将内容包裹为一个JSON属性,属性名由@JsonRootName注解指定 mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);引入依赖
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.11.0</version> </dependency>对于JDK9以上的版本,由于实现了模块化管理,需要引入以下依赖
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> @Data @JacksonXmlRootElement( // 指定根节点名字 localName = "TestPerson", // 指定命名空间 namespace = "www.ding.org") public class Person { public Person() { } public Person(String name, Integer age, Integer code) { this.name = name; this.age = age; this.code = code; } private String name; private Integer age; @JacksonXmlProperty( // 指定该属性是属性还是节点 isAttribute = true) private Integer code; } @Test void test6() throws JsonProcessingException { XmlMapper xmlMapper = new XmlMapper(); Person person = new Person("make",23,1001); String asString = xmlMapper.writeValueAsString(person); System.out.println(asString); // <TestPerson xmlns="www.ding.org" code="1001"><name xmlns="">make</name><age xmlns="">23</age></TestPerson> Person readValue = xmlMapper.readValue(asString, Person.class); System.out.println(readValue); // Person(name=make, age=23, code=1001) }Spring Boot对Jackson的支持非常完善,只要我们引入相应类库,Spring Boot就可以自动配置开箱即用的Bean。Spring自动配置的ObjectMapper(或者XmlMapper),基本上可以适应大部分情况。
@RestController public class TestController { // springboot已经自动注入了,只需要直接使用即可 @Autowired private ObjectMapper objectMapper; @GetMapping("/test2") public void testx(User user) throws JsonProcessingException { String asString = objectMapper.writeValueAsString(user); System.out.println(asString); } @GetMapping("/test") public User test() throws JsonProcessingException { // 自动使用jackson转换 return new User("make",12, LocalDate.now()); } }