2015-11-16 4 views
0

У меня есть 2 метода restful service getCustomerJson и getCustomerXML в классе CustomerResource, где я использую jersey API для Restful Webservices. Все параметры двух методов одинаковы, кроме одного, выдает xml, а другой - json.HTTP GET-запрос с правильным типом контента не ударяет по ожидаемому методу службы

Когда я использую HTTP-запрос GET с заголовком Content-Type = "application/json", он всегда вызывает метод getCustomerXML, который возвращает xml.

Может ли кто-нибудь объяснить мне, как джерси работает в подобной ситуации?

import java.net.URI; 
import java.util.List; 
import java.util.Map; 
import java.util.concurrent.ConcurrentHashMap; 
import java.util.concurrent.atomic.AtomicInteger; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.DELETE; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.WebApplicationException; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.HttpHeaders; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

import domain.Customer; 

@Path("/customers") 
public class CustomerResource { 
    private static Map<Integer, Customer> customerDB = new ConcurrentHashMap<Integer, Customer>(); 
    private static AtomicInteger idCounter = new AtomicInteger(); 

    // Constructor 
    public CustomerResource() { 
    } 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayHello() { 
     return "Hello Kundan !!!"; 
    } 



    @GET 
    @Path("{id}") 
    @Produces("application/xml") 
    public Customer getCustomerXML(@PathParam("id") int id, @Context HttpHeaders header) { 
     final Customer customer = customerDB.get(id); 
     List<String> contentList = header.getRequestHeader("Content-Type"); 
     List<String> languageList = header.getRequestHeader("Accept-Language"); 
     List<String> compressionFormatList = header.getRequestHeader("Content-Type"); 
     if (customer == null) { 
      throw new WebApplicationException(Response.Status.NOT_FOUND); 
     } 
     return customer; 
    } 

    @GET 
    @Path("{id}") 
    @Produces("application/json") 
    public Customer getCustomerJson(@PathParam("id") int id) { 
     final Customer customer = customerDB.get(id); 
     if (customer == null) { 
      throw new WebApplicationException(Response.Status.NOT_FOUND); 
     } 
     return customer; 
    } 

    @POST 
    @Consumes("application/xml") 
    public Response createCustomer(Customer customer) { 
     customer.setId(idCounter.incrementAndGet()); 
     customerDB.put(customer.getId(), customer); 
     System.out.println("Created customer " + customer.getId()); 
     return Response.created(URI.create("/customers/" + customer.getId())).build(); 

    } 

    @PUT 
    @Path("{id}") 
    @Consumes("application/xml") 
    public void updateCustomer(@PathParam("id") int id, Customer customer) { 
     Customer current = customerDB.get(id); 
     if (current == null) 
      throw new WebApplicationException(Response.Status.NOT_FOUND); 

     current.setFirstName(customer.getFirstName()); 
     current.setLastName(customer.getLastName()); 
     current.setStreet(customer.getStreet()); 
     current.setCity(customer.getCity()); 
     current.setState(customer.getState()); 
     current.setZip(customer.getZip()); 
     current.setCountry(customer.getCountry()); 

    } 

    @DELETE 
    @Path("{id}") 
    public void deleteCustomer(@PathParam("id") int id) { 
     customerDB.remove(id); 
     System.out.println("Deleted !"); 

    } 
} 

ответ

1

Accept: application/json. Accept сообщает серверу, какой тип вы хотите вернуть. Content-Type Если для данных типа вы находитесь , отправьте на сервер, как с запросом POST.

+1

И прежде чем вы даже зададите этот вопрос, если вы получите сообщение об ошибке для no applicationBodyWriter для типа application/json, это означает, что вам нужен поставщик JSON. Вам нужно искать вокруг. Это вопрос не по теме для этого вопроса. Если вы не получаете эту ошибку, и все работает, то просто забудьте этот комментарий :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^