Jackson là thư viện mặc định được Spring Boot khuyến nghị.
Spring Boot cung cấp cấu hình tự động cho Jackson, Jackson là một phần của spring-boot-starter-json. Khi Jackson có trên classpath, nó sẽ tự động cấu hình bean ObjectMapper.
Spring Boot cung cấp cấu hình tự động cho Gson. Khi Gson có trên classpath, nó sẽ tự động cấu hình bean Gson. Cung cấp một số thuộc tính cấu hình spring.gson.* để tùy chỉnh cấu hình. Để có sự kiểm soát chi tiết hơn, bạn có thể sử dụng một hoặc nhiều bean GsonBuilderCustomizer.
Spring Boot cung cấp cấu hình tự động cho JSON-B. Khi API JSON-B có trên classpath, nó sẽ tự động cấu hình bean Jsonb. Apache Johnzon là một thư viện JSON-B được ưu tiên, nó cung cấp quản lý phụ thuộc.
Serialize và Deserialize trong Spring Web
Các chú thích sau đây được cung cấp bởi spring-web.
@ResponseBody
Chú thích @ResponseBody được sử dụng để chuyển đổi đối tượng trả về từ phương thức của Controller thành định dạng tương ứng và ghi vào phần thân của HTTP Response. Thường được sử dụng trong trường hợp lấy dữ liệu bất đồng bộ. Thông thường, sau khi sử dụng @RequestMapping, giá trị trả về sẽ được giải mã thành đường dẫn chuyển hướng, nhưng khi sử dụng @ResponseBody, kết quả trả về sẽ không được giải mã thành đường dẫn chuyển hướng, mà được ghi trực tiếp vào phần thân của HTTP Response.
Ví dụ:
@RequestBody
Chú thích @RequestBody được sử dụng để đọc dữ liệu phần thân của HTTP Request, sử dụng HttpMessageConverter mặc định của hệ thống để phân tích cú pháp, sau đó ràng buộc dữ liệu tương ứng vào đối tượng trả về. Sau đó, dữ liệu trả về từ HttpMessageConverter sẽ được ràng buộc vào tham số của phương thức trong Controller.
Định dạng mã hóa dữ liệu phần thân của yêu cầu được xác định bởi phần tử Content-Type trong phần header.
Ví dụ:
@RestController
Trước Spring 4:
Nếu muốn trả về một trang cụ thể, cần sử dụng chú thích @Controller kết hợp với trình phân giải view InternalResourceViewResolver.
Nếu muốn trả về JSON, XML hoặc nội dung mediaType tùy chỉnh đến trang, cần thêm chú thích @ResponseBody vào phương thức tương ứng.
Sau Spring 4, đã thêm chú thích @RestController:
Nó tương đương với @Controller + @RequestBody.
Nếu sử dụng chú thích @RestController trong Controller, các phương thức trong Controller sẽ không thể trả về trang jsp hoặc html, trình phân giải view cấu hình InternalResourceViewResolver sẽ không hoạt động và sẽ trả về nội dung trực tiếp.
Định nghĩa Serialize và Deserialize Json cho một lớp cụ thể
Nếu bạn sử dụng Jackson để serialize và deserialize dữ liệu JSON, bạn có thể cần viết các lớp JsonSerializer và JsonDeserializer tùy chỉnh của riêng bạn. Thông thường, việc đăng ký các serializer tùy chỉnh với Jackson được thực hiện thông qua việc đăng ký các module, nhưng Spring Boot cung cấp một cách khác để đăng ký trực tiếp các Spring Bean bằng cách sử dụng chú thích @JsonComponent.
Bạn có thể sử dụng chú thích @JsonComponent trực tiếp trên lớp JsonSerializer hoặc JsonDeserializer. Bạn cũng có thể sử dụng nó trên lớp chứa serializer/deserializer như một lớp nội bộ, như ví dụ dưới đây:
Tất cả các bean @JsonComponent trong ApplicationContext sẽ tự động đăng ký với Jackson. Vì @JsonComponent được chú thích bằng @Component, nên các quy tắc quét thành phần thông thường được áp dụng.
Spring Boot cũng cung cấp các lớp cơ sở JsonObjectSerializer và JsonObjectDeserializer (JsonObjectSerializer và JsonObjectDeserializer) để cung cấp các phương pháp thay thế hữu ích cho phiên bản chuẩn của Jackson khi serialize đối tượng. Để biết thêm thông tin chi tiết, hãy xem Javadoc của JsonObjectSerializer và JsonObjectDeserializer.
@JsonTest
Sử dụng @JsonTest trong Spring Boot giúp dễ dàng kiểm thử serialize và deserialize.
@JsonTest tương đương với việc sử dụng các cấu hình tự động sau:
Khi sử dụng thư viện json của Jackson trong Spring Boot, bạn có thể sử dụng các thuộc tính cấu hình sau (tương ứng với lớp JacksonProperties):
Cấu hình cho Gson
Khi sử dụng thư viện json của Gson trong Spring Boot, bạn có thể sử dụng các thuộc tính cấu hình sau (tương ứng với lớp GsonProperties):
Sử dụng Fastjson trong Spring Boot
Nhiều lập trình viên Java trong nước thích sử dụng thư viện Fastjson của Alibaba làm thư viện json. Vậy làm thế nào để thay thế thư viện mặc định Jackson bằng Fastjson trong Spring Boot?
Bạn cần thực hiện các bước sau:
(1) Thêm dependency của Fastjson vào file pom.xml:
(2) Triển khai interface WebMvcConfigurer và tùy chỉnh phương thức configureMessageConverters. Ví dụ như sau: