Error 415 Tipo de soporte no soportado: POST no llega a REST si es JSON, pero si XML

En realidad, soy nuevo en REST WS, pero realmente no obtengo este 415 Unsupported Media Type .

Estoy probando mi REST con Poster on Firefox y el GET funciona bien para mí, también el POST (cuando es una application/xml ) pero cuando pruebo application/json no llega al WS, el servidor lo rechaza .

Esta es mi URL: http: // localhost: 8081 / RestDemo / services / customers / add

Esto es JSON que estoy enviando: {"name": "test1", "address" :"test2"}

Esto es XML que estoy enviando:

  test1 
test2

y esta es mi clase de Recursos:

 @Produces("application/xml") @Path("customers") @Singleton @XmlRootElement(name = "customers") public class CustomerResource { private TreeMap customerMap = new TreeMap(); public CustomerResource() { // hardcode a single customer into the database for demonstration // purposes Customer customer = new Customer(); customer.setName("Harold Abernathy"); customer.setAddress("Sheffield, UK"); addCustomer(customer); } @GET @XmlElement(name = "customer") public List getCustomers() { List customers = new ArrayList(); customers.addAll(customerMap.values()); return customers; } @GET @Path("/{id}") @Produces("application/json") public String getCustomer(@PathParam("id") int cId) { Customer customer = customerMap.get(cId); return "{\"name\": \" " + customer.getName() + " \", \"address\": \"" + customer.getAddress() + "\"}"; } @POST @Path("/add") @Produces(MediaType.APPLICATION_JSON) @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public String addCustomer(Customer customer) { //insert int id = customerMap.size(); customer.setId(id); customerMap.put(id, customer); //get inserted Customer result = customerMap.get(id); return "{\"id\": \" " + result.getId() + " \", \"name\": \" " + result.getName() + " \", \"address\": \"" + result.getAddress() + "\"}"; } } 

EDIT 1:

Esta es mi clase de Cliente:

 @XmlRootElement public class Customer implements Serializable { private int id; private String name; private String address; public Customer() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } 

El problema está en la deserialización del cliente de frijol. Sus progtwigs saben cómo hacerlo en XML, con JAXB como Daniel está escribiendo, pero lo más probable es que no sepa cómo hacerlo en JSON.

Aquí tiene un ejemplo con Resteasy / Jackson http://www.mkyong.com/webservices/jax-rs/integrate-jackson-with-resteasy/

Lo mismo con Jersey: http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

Agregar Content-Type: application/json y Accept: application/json en la sección REST Client header

En caso de que esto sea útil para otros, aquí está mi anécdota:

Encontré este hilo como resultado de un problema que encontré mientras usaba Postman para enviar datos de prueba a mi servidor RESTEasy, donde después de un cambio significativo de código, recibí solo 415 errores de tipos de medios no admitidos.

En resumen, deshice todo, eventualmente intenté ejecutar el ejemplo trivial de carga de archivos que sabía que funcionó; no fue así Fue entonces cuando me di cuenta de que el problema era con mi solicitud de cartero. Normalmente no envío ningún encabezado especial, pero en una prueba anterior agregué un encabezado “Content-Type”: “application / json”. POR SUPUESTO, estaba intentando subir “multipart / form-data”. Eliminarlo resolvió mi problema.

Moraleja: revisa tus encabezados antes de explotar tu mundo. 😉

Tuve este problema y descubrí que el problema era que no había registrado la clase JacksonFeature:

 // Create JAX-RS application. final Application application = new ResourceConfig() ... .register(JacksonFeature.class); 

Sin hacer esto, su aplicación no sabe cómo convertir el JSON en un objeto java.

https://jersey.java.net/documentation/latest/media.html#json.jackson

Yo tuve el mismo problema:

curl -v -H “Content-Type: application / json” -X PUT -d ‘{“name”: “json”, “apellido”: “gson”, “casado”: verdadero, “edad”: 32, ” salario “: 123,” hasCar “: true,” childs “: [” serkan “,” volkan “,” aybars “]} ‘XXXXXX / ponyo / UserModel / json

 * About to connect() to localhost port 8081 (#0) * Trying ::1... * Connection refused * Trying 127.0.0.1... * connected * Connected to localhost (127.0.0.1) port 8081 (#0) > PUT /ponyo/UserModel/json HTTP/1.1 > User-Agent: curl/7.28.1 > Host: localhost:8081 > Accept: */* > Content-Type: application/json > Content-Length: 121 > * upload completely sent off: 121 out of 121 bytes < HTTP/1.1 415 Unsupported Media Type < Content-Type: text/html; charset=iso-8859-1 < Date: Wed, 09 Apr 2014 13:55:43 GMT < Content-Length: 0 < * Connection #0 to host localhost left intact * Closing connection #0 

Lo resolví agregando la dependencia a pom.xml de la siguiente manera. Por favor pruebalo.

   com.owlike genson 0.98  

Tengo el mismo problema. De hecho, la solicitud no llegó al método anotado jersey. Resolví el problema con agregar la anotación: @Consumes (MediaType.APPLICATION_FORM_URLENCODED) ¡La anotación @Consumes (” / “) no funciona!

  @Path("/"+PropertiesHabilitation.KEY_EstNouvelleGH) @POST //@Consumes("*/*") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public void get__EstNouvelleGH( @Context HttpServletResponse response) { ... } 

No devuelva cadenas en sus métodos, pero el Cliente se opone a sí mismo y deje que JAXB se encargue de la de / serialización.

Tuve el mismo problema, ya que estaba dando error-415-unsupported-media-type al presionar la llamada posterior usando json mientras ya tenía el

 @Consumes(MediaType.APPLICATION_JSON) 

y solicite encabezados como en mi servicio web tranquilo usando Jersey 2.0+

 Accept:application/json Content-Type:application/json 

Resolví este problema agregando las siguientes dependencias a mi proyecto

  org.glassfish.jersey.media jersey-media-json-jackson 2.25  

esto agregará los siguientes jar a tu biblioteca:

  1. jersey-media-json-jackson-2.25.jar
  2. jersey-entity-filtering-2.25.jar
  3. jackson-module-jaxb-annotations-2.8.4.jar
  4. jackson-jaxrs-json-provider-2.8.4.jar
  5. jackson-jaxrs-base-2.8.4.jar

Espero que también funcione para otros como lo hizo para mí.