Der folgende Code verwendet den Jersey2-Client (v 2.22.2) mit der integrierten Moxy JSON-Unterstützung. Ich versuche, eine generierte Wrapper-Klasse in JSON zu marshallen. Wie Sie unten sehen können, wird die Eigenschaft json
nicht wie vorgesehen entpackt.Problem beim Marshalling generisch mit Moxy und JerseyClient2
Wenn ich ändern Sie den Typ für die json
Eigenschaft Service
und ‚ungenerify‘ der Klasse alles funktioniert wie geplant, aber ich würde es vorziehen, um dies mit Generika zu tun, also muss ich nicht ein paar dieser Wrapper erstellen Klassen für jeden Typ, der auf diese Weise verpackt werden muss.
JSONWrapper.java
public class JSONWrapper<T> implements Serializable {
private T json;
public T getJson() { return this.json; }
public void setJson (T payload) { this.json = payload; }
public JSONWrapper() {}
}
Service.java
public class Service implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
MyClient.java
public class MyClient {
private Client jerseyClient;
public void createService(Service item) {
Invocation.Builder invocationBuilder = buildRequest(SERVICE_PATH);
JSONWrapper<Service> wrapper = new JSONWrapper<>();
wrapper.setJson(item);
final Response response = invocationBuilder.post(Entity.entity(wrapper, MediaType.APPLICATION_JSON_TYPE));
}
public MyClient() {
this.jerseryClient = ClientBuilder.newBuilder().build();
}
public static void main(String[] args) {
MyClient myClient = new MyClient();
Service myService = new Service();
myService.setName("foo");
myClient.createService(myService);
}
}
Mit dem Logging-Filter auf Ich drehte mich zu sehen, dass Moxy die Rangierung der Dinge aussieht so:
{ "json": "[email protected]"}
Als ich es aussehen soll so
{ "json": "{" name ": „foo“} "}
Danke, ich hatte mit GenericEntity gespielt, aber das funktioniert perfekt. – NBW