在本教程中,我们将学习如何使用内置的 Jackson 提供程序在 Spring Boot 应用程序中生成和使用 JSON 数据。
Jackson 项目为 XML 和 JSON 等标准格式提供一流的支持。 Spring Framework 和 Spring Boot 内置了对基于 Jackson 的 JSON 和 XML 序列化/反序列化的支持。
考虑以下 Spring Boot 控制器类:
@RestController
public class CustomerController {
@Autowired CustomerRepository repository;
@RequestMapping("/list")
public List<Customer> findAll() {
return repository.getData();
}
@RequestMapping("/one/{id}")
public Customer findOne(@PathVariable int id) {
return repository.getData().get(id);
}
}
假设 Customer 对象是通过以下方式创建的:
@Component public class CustomerRepository {
List < Customer > customerList = new ArrayList < Customer > ();
@PostConstruct public void init() {
try {
customerList.add(new Customer(1, "frank"); customerList.add(new Customer(2, "john");
}
catch (ParseException e) {
e.printStackTrace();
}
}
public List < Customer > getData() {
return customerList;
}
}
然后,当请求 URL http://localhost:8080/list 时,将返回以下 JSON 数据:
[ { "id": 1, "name": "frank" }, { "id": 2, "name": "john" } ]
不需要添加任何 jackson-core、jackson-annotations 和 jackson-databind,因为它们的 jar 是由 Spring Boot 自动添加的:
jar tvf demo-rest-0.0.1-SNAPSHOT.jar . . . . 1348389 Tue Aug 06 01:41:54 CEST 2019 BOOT-INF/lib/jackson-databind-2.9.9.3.jar 66519 Sat Jul 29 20:53:26 CEST 2017 BOOT-INF/lib/jackson-annotations-2.9.0.jar 325632 Wed May 15 19:58:38 CEST 2019 BOOT-INF/lib/jackson-core-2.9.9.jar 33429 Thu May 16 03:26:48 CEST 2019 BOOT-INF/lib/jackson-datatype-jdk8-2.9.9.jar 100674 Thu May 16 03:27:12 CEST 2019 BOOT-INF/lib/jackson-datatype-jsr310-2.9.9.jar 8645 Thu May 16 03:26:28 CEST 2019 BOOT-INF/lib/jackson-module-parameter-names-2.9.9.jar
如前所述,如果您对默认的 Jackson 序列化/反序列化没问题,则无需添加任何额外的依赖项。另一方面,如果你想在你的代码中使用 Jackson 注释来编译应用程序,则需要添加一个 Jackson 依赖项。
让我们创建一个更复杂的 Customer 对象:
public class Customer { @JsonIgnore private int id; @JsonProperty("customer_name") private String name; @JsonSerialize(using = CustomDateSerializer.class) public Date birthDate; public Customer(int id, String name, Date birthDate) { this.id = id; this.name = name; this.birthDate = birthDate; }
// Getter/Setters omitted for brevity
}
该类包含以下注释:
public class CustomDateSerializer extends StdSerializer<Date> {
private static SimpleDateFormat formatter = new SimpleDateFormat("EEEEE MMMMM yyyy");
public CustomDateSerializer() {
this(null);
}
public CustomDateSerializer(Class<Date> t) {
super(t);
}
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2)
throws IOException, JsonProcessingException {
gen.writeString(formatter.format(value));
}
}
这一次,额外的 Date 字段将包含在 Customer 类的 Constructor 中:
@PostConstruct public void init() {
try {
customerList.add(new Customer(1, "frank", new SimpleDateFormat("dd/MM/yyyy").parse("17/10/1970")));
customerList.add(new Customer(2, "john", new SimpleDateFormat("dd/MM/yyyy").parse("25/07/1980")));
} catch (ParseException e) {
e.printStackTrace();
}
}
(http://localhost:8080/list) 的结果将是以下 JSON 数据:
[ { "birthDate": "Saturday October 1970", "customer_name": "frank" }, { "birthDate": "Friday July 1980", "customer_name": "john" } ]
为了编译您的示例,您需要包含以下额外依赖项:
<?xml version="1.0" encoding="UTF-8"?><project>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
</project>
就这样。此 Spring Boot Jackson 示例的源代码可在此处获得:https://github.com/fmarchioni/masterspringboot/tree/master/json/demo-jackson
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
内容来源于网络,如有侵权,请联系作者删除!