type - java rest post json example
El servicio REST de POST a Jersey obtiene el error 415 Tipo de medio no admitido (4)
Estoy usando una aplicación web JAX-RS con Jersey y Tomcat. Las solicitudes de obtención están bien, sin embargo, cuando intento publicar JSON obtengo un estado HTTP 415 - Tipo de medio no admitido.
Aquí está mi simple HelloWorld.java:
package service;
import javax.ws.rs.*;
@Path("hello")
public class HelloWorld {
@GET
@Produces("text/plain")
public String get() {
return "hello world";
}
@POST
@Consumes("application/json")
public String post(JS input) {
return input.hello;
}
public static class JS {
public String hello;
}
}
Aquí está la solicitud que intento en Postman (con el encabezado ''application / json''):
Aquí está el diseño del proyecto con bibliotecas:
Estoy usando:
- Java 7 x64
- Jersey 2.17
- Tomcat 7.0.62 x64
¡Gracias!
Creo que la solicitud de publicación está funcionando correctamente, pero su navegador / cartero no puede analizar la respuesta devuelta por el servicio. Devuelve texto sin formato y Postman está esperando json. Agregue la anotación Produce a su servicio web y configúrelo también en json. También sugiero que verifique con Fiddler2 para ver la información exacta que pasa por el cable.
La distribución de Jersey no viene con soporte JSON / POJO fuera de la caja. Necesita agregar las dependencias / jarras.
Añadir todos estos
- jersey-media-json-jackson-2.17
- jackson-jaxrs-json-provider-2.3.2
- jackson-core-2.3.2
- jackson-databind-2.3.2
- jackson-annotations-2.3.2
- jackson-jaxrs-base-2.3.2
- jackson-module-jaxb-annotations-2.3.2
- jersey-entity-filtering-2.17
Con Maven, a continuación, extraer todo lo anterior en
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.17</version>
</dependency>
Para futuros lectores que no utilicen Jersey 2.17 (y que usen jars directamente en lugar de Maven), puede ir aquí para encontrar la versión de Jersey que está usando y ver qué versiones de dependencia transitiva necesita. La versión actual de esta dependencia de Jersey usa Jackson 2.3.2. Eso es lo principal que debes tener en cuenta.
Comprueba tu REST llamada contentType. Debería ser contentType: ''application / json'', si está pasando datos json a la clase POJO.
Pasó por muchas de las respuestas tanto en esta página como en otras, pero fue en vano. Esto realmente funcionó para mí:
MÉTODO 1: en lugar de pasar JSONObject
como parámetro al método del recurso, pase una String
lugar. Tome el String
y cree un JSONObject
con él y luego puede usarlo en su código. Al igual que,
@Path("/people")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response doGetperson(String jsonRequest) {
try {
JSONObject requestedJSON = new JSONObject(jsonRequest);
//So now you can use requestedJSON object created to do your stuff
return Response.ok("{/"name/":" + requestedJSON.getString("user") + "}").build();
} catch (Exception ex) {
return Response.ok("{ /"name/":/"/"}").build();
}
}
MÉTODO 2:
Agregando esta dependencia a partir de septiembre de 2017 :
<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-moxy -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.26</version>
</dependency>