2013-07-31 35 views
5

Trình khách/trình duyệt thực hiện yêu cầu JSON tới tài nguyên còn lại của tôi (loại nội dung của yêu cầu là application/json và phương thức REST tương ứng là @Consumes("application/json") được chú thích).Lấy tham số JSON đơn giản từ một yêu cầu JSON trong JAX-RS

@Path("/process-something") 
@POST 
@Produces("application/json") 
@Consumes("application/json") 
@HandleDefaultExceptions 
public AResponse processSomething(List<Long>) { 

} 

Nội dung JSON bao gồm một số loại đơn giản, như List<Long> hoặc String.

Có khả năng đơn giản để nhận các thông số JSON được chèn vào chỉ bằng cách chú thích nó bằng cách nào đó, tương tự như @FormParam trong trường hợp yêu cầu application/x-www-form-urlencoded không? Tôi muốn một số giải pháp dễ dàng hơn giải mã chuỗi JSON với số ObjectMapper hoặc số JSONObject của Jettison.

+0

bạn đang sử dụng khung công tác nào để triển khai jaxrs?, Có nhiều khung công cụ hỗ trợ JSON mặc dù chỉ chú thích là không đủ, bạn sẽ phải lập bản đồ các nhà cung cấp phù hợp nhưng đó không phải là vấn đề lớn. Tham khảo Jersey, Apache CXF – Sikorski

+0

Jersey là những gì tôi sử dụng. Tôi hy vọng bằng cách lập bản đồ bạn không có nghĩa là tạo ObjectMapper hoặc một số đối tượng khác (xem phần cuối của câu hỏi) ... –

+1

không có nghĩa là bạn sẽ phải cung cấp một mục nhập trong web.xml hoặc một số tệp cấu hình khác mà sẽ nói với jersey để sử dụng hỗ trợ json. xem này: https://jersey.java.net/documentation/latest/media.html#json - Và đây là những giải pháp dễ dàng hơn! – Sikorski

Trả lời

4

Bạn có thể tạo một lớp Java phản ánh mô hình dữ liệu của đối tượng JSON của bạn và chú thích nó bằng JAXB's @XmlRootElement. Bạn có thể ánh xạ các thuộc tính thành tên khóa JSON tùy chỉnh bằng các chú thích @XmlElement, ví dụ:

@XmlRootElement 
public class MyJSONOject{ 
    @XmlElement(name="json-key-name") 
    public String attribute; 
} 

Sau đó, Jersey có thể giải mã đối tượng JSON cho bạn một cách rõ ràng và thì đấy!

@Path("/process-something") 
@POST 
@Produces("application/json") 
@Consumes("application/json") 
public AResponse processSomething(MyJSONOject json) { 
    log.fine(json.attribute); 
} 
+1

Mặc dù tôi mong đợi một cách dễ dàng hơn, chẳng hạn như lấy tham số được chèn bằng chú thích (xem câu trả lời của tôi), tôi đánh dấu câu trả lời này vì đây vẫn là giải pháp tốt hơn giải mã thủ công với Jackson. –

1

Theo this documentation có 6 chú thích dựa trên tham số được sử dụng để trích xuất tham số từ yêu cầu và không ai có vẻ là tham số JSON.

+0

tại sao bạn viết câu trả lời này? – Sikorski

+1

Vì đây có thể là câu trả lời ... ít nhất không có chú thích trong tiêu chuẩn JAX-RS để trích xuất tham số JSON. –

+0

bạn nghĩ gì về @Consumes ("application/json")? – Sikorski

Các vấn đề liên quan