unsupported type statuscode reasonphrase react que prácticas practicas paradigma origin modelo metodos mejores implementar headers has habilitar guía from error ejemplo control consumes como code buenas been arquitectura application allow java json web-services rest post

java - statuscode - unsupported media type react



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

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

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:

<customer> <name>test1</name> <address>test2</address> </customer>

y esta es mi clase de Recursos:

@Produces("application/xml") @Path("customers") @Singleton @XmlRootElement(name = "customers") public class CustomerResource { private TreeMap<Integer, Customer> customerMap = new TreeMap<Integer, Customer>(); 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<Customer> getCustomers() { List<Customer> customers = new ArrayList<Customer>(); 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; } }



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. ;)


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.


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) { ... }


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.

<dependency> <groupId>com.owlike</groupId> <artifactId>genson</artifactId> <version>0.98</version> </dependency>