Các phương pháp hay nhất về JavaScript POJO

Bạn có thể chuyển nội dung nhị phân làm đối số đầu vào cho phương thức chú thích Java theo kiểu phát trực tuyến. Service Bus xử lý việc này bằng cách kiểm tra loại Java của đối số đầu vào. Nếu đối số thuộc loại

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
2, hệ thống sẽ tạo một đối tượng bao bọc
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3 và lấy
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
4 từ nguồn tương ứng bằng cách gọi phương thức
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
5. Bạn có thể gọi phương thức này bao nhiêu lần tùy ý trong mã chú thích Java của mình

Ngoài ra, phương thức

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
6 trả về
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
7 trừ khi nội dung nhị phân là tệp đính kèm MIME được phân trang, trong trường hợp đó, giá trị của tiêu đề Kiểu nội dung của phần MIME tương ứng được sử dụng, nếu có

Tương tự, phương thức

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
8 trả về giá trị chuỗi của thuộc tính tham chiếu nội dung nhị phân trừ khi nội dung nhị phân là tệp đính kèm MIME được phân trang, trong trường hợp đó, giá trị của tiêu đề Content-ID của phần MIME tương ứng được sử dụng, nếu có. Phương pháp
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
9 ném
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
0, theo yêu cầu

Sau khi hoàn thành, kết quả được chuyển đến đối số phương thức chú thích Java. Lưu ý rằng để diễn giải chính xác các octet nhị phân trong luồng đầu vào, phương thức chú thích Java cũng có thể yêu cầu giá trị của tiêu đề Mã hóa truyền nội dung [ví dụ: để xác định xem mã hóa có phải là nhị phân, 7 bit, 8 bit, v.v.]. Bạn có thể chuyển tham số này dưới dạng một đối số riêng biệt, như minh họa trong phần sau

$attachments/*:attachment[1]/*:Content-Transfer-Encoding/text[]

Lưu ý rằng nếu đối số đầu vào không phải là Nguồn dữ liệu, Bus dịch vụ sẽ chuyển đổi đối số thành mảng byte[]

Hầu hết các trang web ngày nay trao đổi dữ liệu ở định dạng JSON. Máy chủ web, ứng dụng web và thiết bị di động, thậm chí cả thiết bị IoT đều giao tiếp với nhau bằng JSON. Do đó, một cách dễ dàng và linh hoạt để xử lý JSON là điều cần thiết để bất kỳ phần mềm nào tồn tại trong thế giới ngày nay

Mã ví dụ

Bài viết này được kèm theo một ví dụ mã làm việc trên GitHub

JSON là gì?

JSON là viết tắt của “Ký hiệu đối tượng JavaScript”, đây là định dạng dựa trên văn bản để biểu thị dữ liệu có cấu trúc dựa trên cú pháp đối tượng JavaScript. Định dạng năng động và đơn giản của nó khiến nó trở nên cực kỳ phổ biến. Về bản chất, nó tuân theo mô hình bản đồ khóa-giá trị cho phép các đối tượng và mảng lồng nhau

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}

Jackson là gì?

Jackson chủ yếu được biết đến như một thư viện chuyển đổi các chuỗi JSON và các Đối tượng Java cũ đơn giản [POJO]. Nó cũng hỗ trợ nhiều định dạng dữ liệu khác như CSV, YML và XML

Jackson được nhiều người ưa thích vì sự trưởng thành [13 tuổi] và khả năng tích hợp tuyệt vời với các framework phổ biến, chẳng hạn như Spring. Hơn nữa, đây là một dự án nguồn mở được phát triển và duy trì tích cực bởi một cộng đồng rộng lớn

Dưới vỏ bọc, Jackson có ba gói cốt lõi Truyền phát, Databind và Chú thích. Với những điều đó, Jackson cung cấp cho chúng tôi ba cách để xử lý chuyển đổi JSON-POJO

API truyền trực tuyến

Đó là cách tiếp cận nhanh nhất trong ba cách và là cách có ít chi phí nhất. Nó đọc và ghi nội dung JSON dưới dạng các sự kiện rời rạc. API cung cấp một JsonParser để đọc JSON thành POJO và một JsonGenerator ghi POJO vào JSON

Mô Hình Cây

Mô hình cây tạo một biểu diễn cây trong bộ nhớ của tài liệu JSON. Một ObjectMapper chịu trách nhiệm xây dựng một cây các nút JsonNode. Đây là cách tiếp cận linh hoạt nhất vì nó cho phép chúng ta duyệt qua cây nút khi tài liệu JSON không ánh xạ tốt tới POJO

Ràng buộc dữ liệu

Nó cho phép chúng tôi thực hiện chuyển đổi giữa POJO và tài liệu JSON bằng cách sử dụng trình truy cập thuộc tính hoặc sử dụng chú thích. Nó cung cấp hai loại ràng buộc

  • Liên kết dữ liệu đơn giản chuyển đổi JSON sang và từ Bản đồ Java, Danh sách, Chuỗi, Số, Booleans và các đối tượng null

  • Ràng buộc dữ liệu đầy đủ chuyển đổi JSON sang và từ bất kỳ lớp Java nào

ObjectMapper

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3 là phần được sử dụng phổ biến nhất trong thư viện Jackson vì đây là cách dễ dàng nhất để chuyển đổi giữa POJO và JSON. Nó sống ở
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
4

Phương thức

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
5 được sử dụng để phân tích cú pháp [giải tuần tự hóa] JSON từ Chuỗi, Luồng hoặc Tệp thành POJO

Mặt khác, phương thức

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
6 được sử dụng để biến POJO thành JSON [tuần tự hóa]

Cách thức hoạt động của

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3 để tìm ra trường JSON nào ánh xạ tới trường POJO nào bằng cách khớp tên của các trường JSON với tên của các phương thức getter và setter trong POJO

Điều đó được thực hiện bằng cách loại bỏ các phần “get” và “set” trong tên của các phương thức getter và setter và chuyển đổi ký tự đầu tiên của tên phương thức còn lại thành chữ thường

Ví dụ: giả sử chúng ta có một trường JSON có tên là

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
8, ObjectMapper sẽ khớp nó với getter
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
9 và setter
{"firstName":"Mark","lastName":"James","age":20}
0 trong POJO

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3 có thể định cấu hình và chúng tôi có thể tùy chỉnh nó theo nhu cầu của mình trực tiếp từ phiên bản
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3 hoặc bằng cách sử dụng chú thích Jackson như chúng ta sẽ thấy sau

Phụ thuộc Maven

Trước khi chúng tôi bắt đầu xem xét mã, chúng tôi cần thêm phụ thuộc Jackson Maven

{"firstName":"Mark","lastName":"James","age":20}
3, lần lượt bổ sung thêm
{"firstName":"Mark","lastName":"James","age":20}
4 và
{"firstName":"Mark","lastName":"James","age":20}
5

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
5

Chúng tôi cũng đang sử dụng Lombok để xử lý mã soạn sẵn cho getters, setters và constructor

Tuần tự hóa và giải tuần tự hóa JSON cơ bản với Jackson

Hãy xem qua các trường hợp sử dụng quan trọng nhất của Jackson với các ví dụ về mã

Chuyển đổi POJO / JSON cơ bản bằng ObjectMapper

Hãy bắt đầu bằng cách giới thiệu một POJO đơn giản có tên là Nhân viên

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
6

Hãy bắt đầu bằng cách chuyển POJO thành chuỗi JSON

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}

Chúng ta nên xem đây là đầu ra

{"firstName":"Mark","lastName":"James","age":20}

Bây giờ, hãy xem chuyển đổi một chuỗi JSON thành một đối tượng Nhân viên bằng cách sử dụng

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
0

ObjectMapper cũng cung cấp một API phong phú để đọc JSON từ các nguồn khác nhau thành các định dạng khác nhau, hãy kiểm tra những cái quan trọng nhất

Tạo POJO từ tệp JSON

Điều này được thực hiện bằng phương pháp

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
5

Tệp JSON dưới tài nguyên thử nghiệm

{"firstName":"Mark","lastName":"James","age":20}
8

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
4

Tạo một POJO từ một mảng byte của JSON

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
5

Tạo danh sách POJO từ JSON

Đôi khi tài liệu JSON không phải là một đối tượng mà là một danh sách các đối tượng. Hãy xem làm thế nào chúng ta có thể đọc nó

{"firstName":"Mark","lastName":"James","age":20}
9

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
7

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
50

Tạo bản đồ từ JSON

Chúng tôi có thể chọn phân tích cú pháp JSON thành Java

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
00, điều này rất thuận tiện nếu chúng tôi không biết điều gì sẽ xảy ra từ tệp JSON mà chúng tôi đang cố phân tích cú pháp.
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3 sẽ biến tên của từng biến trong JSON thành khóa Bản đồ và giá trị của biến đó thành giá trị của khóa đó

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
51

Đôi khi, JSON mà chúng tôi mong đợi có thể có một số trường bổ sung không được xác định trong POJO của chúng tôi. Hành vi mặc định của Jackson là ném một ngoại lệ

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
02 trong những trường hợp như vậy. Tuy nhiên, chúng ta có thể nói với Jackson rằng đừng căng thẳng về những lĩnh vực chưa biết và chỉ cần bỏ qua chúng. Điều này được thực hiện bằng cách cấu hình
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
03 của ObjectMapper thành false

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
04

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
52

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
53

Chuyển đổi ngày có thể phức tạp vì chúng có thể được biểu diễn bằng nhiều định dạng và mức độ đặc tả [giây, mili giây, v.v. ]

Trước khi nói về chuyển đổi Jackson và Date, chúng ta cần nói về API Date mới do Java 8 cung cấp. Nó được giới thiệu để giải quyết những thiếu sót của

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
05 và
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
06 cũ hơn. Chúng tôi chủ yếu quan tâm đến việc sử dụng lớp
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
07 cung cấp một cách hiệu quả để diễn đạt ngày và giờ

Để làm được điều đó, chúng ta cần thêm một mô-đun bổ sung vào Jackson để nó có thể xử lý

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
07

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
54

Sau đó, chúng ta cần yêu cầu

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
3 tìm kiếm và đăng ký mô-đun mới mà chúng ta vừa thêm vào

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
55

Hành vi mặc định cho Jackson sau đó là hiển thị ngày là

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
30 Vì vậy, đầu ra sẽ là
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
31

Tuy nhiên, chúng ta có thể nói cho Jackson biết chúng ta muốn ngày tháng ở định dạng nào. Điều này có thể được thực hiện bằng cách sử dụng chú thích

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
32

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
56

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
57

Điều này sẽ xuất ra

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
33

Chúng ta có thể sử dụng cấu hình tương tự ở trên để đọc trường JSON thành một ngày

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
34

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
58

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
59

Chú thích của Jackson

Chú thích trong Jackson đóng vai trò chính trong việc tùy chỉnh cách thức diễn ra quá trình chuyển đổi JSON/POJO. Chúng tôi đã thấy một ví dụ về nó với chuyển đổi ngày mà chúng tôi đã sử dụng chú thích

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
32. Chú thích chủ yếu ảnh hưởng đến cách dữ liệu được đọc, ghi hoặc thậm chí cả hai. Hãy cùng khám phá một số chú thích đó dựa trên danh mục của chúng

đọc chú thích

Chúng ảnh hưởng đến cách Jackson chuyển đổi JSON thành POJO

@JsonSetter

Điều này hữu ích khi chúng tôi muốn khớp một trường trong chuỗi JSON với một trường trong POJO nơi tên của chúng không khớp

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
60

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
61

@JsonAnySetter

Chú thích này hữu ích cho các trường hợp JSON chứa một số trường không được khai báo trong POJO. Nó được sử dụng với một phương thức setter được gọi cho mọi trường không được nhận dạng

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
62

Tệp

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
36

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
63

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
64

Viết chú thích

Chúng ảnh hưởng đến cách Jackson chuyển đổi POJO thành JSON

@JsonGetter

Điều này hữu ích khi chúng tôi muốn ánh xạ trường POJO sang trường JSON bằng một tên khác. Ví dụ: giả sử chúng tôi có lớp Cat này với trường

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
8, nhưng chúng tôi muốn tên JSON của nó là
public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
38

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
65

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
66

Điều này sẽ xuất ra

@JsonAnyGetter

Chú thích này cho phép chúng ta coi một đối tượng Bản đồ là nguồn của các thuộc tính JSON. Giả sử chúng ta có bản đồ này dưới dạng một trường trong lớp Cat

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
67

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
68

Sau đó, điều này sẽ xuất ra

{
  "array": [
    1,
    2,
    3
  ],
  "boolean": true,
  "color": "gold",
  "null": null,
  "number": 123,
  "object": {
    "a": "b",
    "c": "d"
  },
  "string": "Hello World"
}
69

Đọc/Ghi chú thích

Những chú thích đó ảnh hưởng đến cả việc đọc và viết JSON

Tệp được chú thích bị bỏ qua trong khi viết và đọc JSON

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
0

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
1

Điều này sẽ in ra

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
39

Điều tương tự cũng áp dụng cho việc đọc vào POJO

Giả sử chúng tôi có tệp

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
40 này

public class JacksonTest {  
  
  ObjectMapper objectMapper = new ObjectMapper[];
  
  @Test  
  void pojoToJsonString[] throws JsonProcessingException {  
        Employee employee = new Employee["Mark", "James", 20];  
  
        String json = objectMapper.writeValueAsString[employee];  
  
        System.out.println[json];  
    }  
}
2

Jackson có nhiều chú thích hữu ích hơn cho phép chúng tôi kiểm soát nhiều hơn quá trình tuần tự hóa/giải tuần tự hóa. Danh sách đầy đủ của chúng có thể được tìm thấy trên kho lưu trữ Github của Jackson

Tóm lược

  • Jackson là một trong những thư viện mạnh mẽ và phổ biến nhất để xử lý JSON trong Java

  • Jackson bao gồm ba mô-đun chính Streaming API, Tree Model và Data Binding

  • Jackson cung cấp một ObjectMapper có khả năng cấu hình cao để phù hợp với nhu cầu của chúng tôi thông qua việc thiết lập các thuộc tính của nó và cũng sử dụng các chú thích

    Chúng tôi có thể tạo POJO bằng JavaScript không?

    nguyên mẫu. Trực giác đằng sau POJO là POJO là một đối tượng chỉ chứa dữ liệu, trái ngược với các phương thức hoặc trạng thái bên trong. Hầu hết các cơ sở mã JavaScript coi các đối tượng được tạo bằng dấu ngoặc nhọn {} là POJO. Tuy nhiên, cơ sở mã nghiêm ngặt hơn đôi khi tạo POJO bằng cách gọi Object .

    JavaScript thực hành tốt nhất là gì?

    Giới thiệu. Gọi mọi thứ theo tên của chúng — tên hàm và biến dễ đọc, ngắn gọn và dễ hiểu. Tránh toàn cầu. Bám sát một phong cách mã hóa nghiêm ngặt. Bình luận càng nhiều càng tốt nhưng không nhiều hơn.

    Làm cách nào để đạt được sự kế thừa trong JavaScript?

    Để tạo kế thừa lớp, sử dụng từ khóa mở rộng .

    Chuỗi nguyên mẫu trong JavaScript là gì?

    Chuỗi nguyên mẫu JavaScript . If an object tries to access the same property that is in the constructor function and the prototype object, the object takes the property from the constructor function.

Chủ Đề