Lưu ý: Tôi là trưởng nhóm EclipseLink JAXB (MOXy) và là thành viên của nhóm chuyên gia JAXB (JSR-222).
Tôi có thể tạo một lớp, chú thích nó với JAXB chú thích (hỗ trợ XML) và tuyên bố trong web.xml cho JSON (thư viện Jackson) hỗ trợ?
Bạn luôn có thể sử dụng lớp học Application
để chỉ định MessageBodyReader
/MessageBodyWriter
cho ràng buộc JSON. Tôi tin rằng Jackson cung cấp một thực hiện trong lọ của nó. Dưới đây là một ví dụ về một lớp Application
chỉ rõ MOXY là nhà cung cấp JSON:
package org.example;
import java.util.*;
import javax.ws.rs.core.Application;
import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
public class CustomerApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> set = new HashSet<Class<?>>(2);
set.add(MOXyJsonProvider.class);
set.add(CustomerService.class);
return set;
}
}
Hoặc tôi cần phải tạo riêng hai lớp cho JSON và XML?
EclipseLink JAXB (MOXy) cung cấp ràng buộc XML nguyên gốc và được thiết kế để cho phép bạn sử dụng same object model for both JSON and XML.Bạn có thể tích hợp nó vào ứng dụng JAX-RS của bạn bằng cách sử dụng lớp MOXyJsonProvider
:
Làm thế nào tôi có thể lập trình chọn loại trở lại (JSON hoặc XML)?
Server Side
Bạn có thể xác định rằng dịch vụ của bạn cung cấp cả XML và tin nhắn JSON sử dụng @Produces
chú thích.
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
Để biết thêm thông tin
Client Side
Bạn có thể sử dụng MediaType để chỉ ra loại tin nhắn. Dưới đây là ví dụ sử dụng API ứng dụng khách của Jersey. Lưu ý cách URL giống nhau, chỉ loại phương tiện được yêu cầu khác nhau.
Client client = Client.create();
WebResource resource = client.resource("http://localhost:8080/CustomerService/rest/customers");
// Get XML response as a Customer
Customer customer = resource.path("1")
.accept(MediaType.APPLICATION_XML)
.get(Customer.class);
System.out.println(customer.getLastName() + ", "+ customer.getFirstName());
// Get JSON response as a Customer
Customer customer = resource.path("1")
.accept(MediaType.APPLICATION_JSON)
.get(Customer.class);
System.out.println(customer.getLastName() + ", "+ customer.getFirstName());
Để biết thêm thông tin
Nguồn
2012-07-08 11:16:10
cảm ơn, nhưng tôi có thể cấu hình loại phản ứng unsing 'Response' đối tượng khi trở về từ phương pháp? – MyTitle
Phản hồi có thể chỉ định loại nội dung: trả về Response.ok. (...) .type ("application/json"). build(); – mjn
Nếu bạn cầu kỳ về các URL như tôi ..., bạn có thể sử dụng đuôi tệp: '/ resources/todo.json' hoặc'/resources/todo.xml' – Webnet