2012-03-07 35 views
10

Tôi đang viết một số dịch vụ RESTful bằng cách sử dụng Spring MVC. Tôi đang sử dụng jsckson mapper để thực hiện chuyển đổi It. Tất cả đều hoạt động tốt ngoại trừ việc nó tạo ra các trường hoàn toàn không có thứ tự.Các trường JSON không theo thứ tự

ví dụ: Nếu đối tượng thực thể của tôi trông như thế này:

public class EntityObj 
{ 
    private String x; 
    private String y; 
    private String z; 
} 

Nếu bây giờ tôi có một danh sách EntityObjs, và tôi trở về này từ bộ điều khiển, các json có thứ tự lẫn lộn cho các lĩnh vực ví dụ: [{y : "ABC", z: "XYZ", x: "DEF"}, {y: "ABC", z: "XYZ", x: "DEF"}]

Nhìn xung quanh để tìm giải pháp nhưng không tìm thấy bất kì. Bất cứ ai khác phải đối mặt với vấn đề này?

Cảm ơn sự giúp đỡ

+3

Nhưng tại sao điều này là một vấn đề? Bất cứ khi nào tôi sử dụng JSON tôi cũng nhận thấy thứ tự kỳ lạ, nhưng dù sao khi bạn truy cập nó sau này, bạn có thể truy cập bằng "khóa", vì vậy thứ tự không quan trọng. – YuviDroid

+0

Điểm tốt là nó không phải là một vấn đề, nhưng tôi tò mò tại sao bạn muốn đặt hàng chúng. Bạn có lý do đặc biệt để làm như vậy không? – koenpeters

+0

tốt, chỉ để làm cho nó dễ đọc. không có vấn đề phân tích cú pháp nó. tôi có các đối tượng có thuộc tính danh sách. Vì vậy, nói một objectA với một danh sách các objectB bên trong nó cùng với các thuộc tính khác như id, name, vv. Khi một số người nhìn thấy phản ứng json từ API của tôi, tôi muốn họ thấy id và tên và danh sách các ObjectBs sau đó . – gotz

Trả lời

18

Như những người khác đã đề xuất, đặt hàng không quan trọng. Tuy nhiên, nếu bạn thích đặt hàng nhất định, sử dụng @JsonPropertyOrder chú thích như sau:

@JsonPropertyOrder({ "x", "y", "x" }) 
public class EntityObj { 
} 
+0

Cảm ơn rất nhiều, Điều đó giải quyết vấn đề của tôi. – gotz

+2

hoặc có thể xác định toàn cầu 'objectMapper.configure (MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)' –

3

Tôi nhận ra điều này không làm việc với tên biến bắt đầu bằng chữ hoa chữ cái. Ví dụ: một biến có tên "ID" sẽ không được đặt hàng.

+1

bạn có thể sửa lỗi bằng cách sử dụng @JsonPropertyOrder ({"id", "otherfields"}), điều quan trọng là liệt kê các trường khi chúng xảy ra trong đầu ra JSON. – pushNpop

+0

Tôi không thể +1 đủ điều này. Jackson @JsonPropertyOrder yêu cầu mọi thuộc tính trong lớp bạn muốn được sắp xếp để được lạc đà. Đã không thấy tài liệu đó ở bất kỳ đâu. –

0

Nếu phù hợp với thứ tự chữ cái bạn và bạn đang sử dụng Spring Boot, bạn có thể thêm này trong application.properties của bạn:

spring.jackson.mapper.sort-properties-alphabetically=true 
Các vấn đề liên quan