J'ai une classe qui ressemble à ceci:paramètre unmarshall json @POST
public class Test {
@JsonProperty("name")
private String name;
public Test(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
De plus il y a une classe d'extrémité à l'aide javax.ws.rs:
@Path("/Test")
public class Endpoint {
@POST
@Consumes("application/json")
@Produces("application/json")
@HeaderParam("Accept") @DefaultValue("application/json")
public Response createTest(String json) {
return Response.status(Response.Status.ACCEPTED).entity(json).build();
}
}
Cela fonctionne comme prévu.
Question: Comment faire pour que createTest() prenne la classe "Test" en tant que paramètre au lieu de "String"?
Essai: L'envoi qui suit donne "415 Type de support non pris en charge" lors de l'utilisation "Test" comme paramter à createTest():
POST ../Endpoint/ HTTP/1.1
Host: localhost:8080
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 56d06798-2b32-57fc-c22a-0240aceb8f98
{
"name": "Kalle"
}
Vous pouvez utiliser '@ FormParam' attendre argument comme une classe ou vous pouvez utiliser mappeur d'objets pour analyser JSON dans votre classe .. – z21
Objectmapper fonctionne mais beaucoup plus agréable avec « auto "Unmarshall. '@FormParam (" test ") La chaîne json' n'a pas de valeur (null). '@FormParam (" test ") Test test' résultats dans _com.sun.jersey.spi.inject.Errors.processErrorMessages_ au démarrage du serveur ... – Grains