Поддержка нескольких типов контента с помощью JAX-RS

#web-services #rest #jakarta-ee #java-ee-6

#веб-сервисы #rest #джакарта-ee #java-ee-6

Вопрос:

Цель состоит в том, чтобы создать веб-службу с полным доступом с использованием JAX-RS, которая будет выборочно возвращать результат либо в формате json, либо в формате xml, в зависимости от запроса пользователя. Например, если пользователь отправляет запрос GET следующим образом, результаты будут возвращены в формате json:

 http://api.myurl.com/order/1234.json
  

Аналогично, если пользователь отправит get в следующем запросе, результаты будут возвращены в формате xml:

 http://api.myurl.com/order/123.xml
  

Я не хочу использовать параметры запроса для этого (т. Е. http://api.myurl.com/order/123?format=json ). Использование постфиксации .json или .xml мне кажется более интуитивным.

Какая стратегия была бы наилучшей для выполнения этого с использованием JAX-RS api?

Ответ №1:

Одним из способов было бы более тщательное использование @Path аннотаций:

 @GET
@Path("/order/{id}.xml")
@Produces("application/xml")
public Order getOrderAsXML(@PathParam("id") int id) {
    return realGetOrder(id);
}

@GET
@Path("/order/{id}.json")
@Produces("application/json")
public Order getOrderAsJSON(@PathParam("id") int id) {
    return realGetOrder(id);
}

private Order realGetOrder(int id) {
    // ...
}
  

Однако я был бы склонен использовать единый метод, обслуживающий оба, и позволить клиенту и поддерживающей платформе JAX-RS использовать согласование контента для выбора метода сериализации.