2017-02-20 2 views
1

Ich hatte Jackson deserializing Problem einer meiner Java-Klasse, die von Drittanbieter-API kommt, die nicht Standard-Konstruktoren hat. Um dieses Problem zu überwinden verwendete ich JacksonMixIn und es funktionierte Das Problem war, dass ich einen REST-Endpunkt auf Jersey API implementiert haben, die eine der oben genannten Klassen als Methodenparameter von Client-Seite zu Server-Seite akzeptiert wird.So, wenn das Deserialisieren es mir einen folgenden Fehler wirft.Wie Jackson Mixin auf Jersey REST Services Methode Parameter verwenden

No suitable constructor found for type [simple type, class net.rcarz.jiraclient.Priority]: can not instantiate from JSON object (need to add/enable type information?) 
at [Source: [email protected]; line: 1, column: 454]... 

Betroffene Klassen

public class TestCaseVO{ 
    private Priority priority; 
    private User reporter; 
} 

public class Priority { 
    protected Priority(RestClient restclient, JSONObject json) { 
    super(restclient); 

    if (json != null) 
     deserialise(json); 
} 
} 

Dies ist das Objekt verwendet Client zum Server

public class myDataObject{ 
     private String userName; 
     private List<TestCaseVO> testCases; 
     //Getter and setters 
    } 

Jersey Endpoint

zu kommunizieren
@POST 
    @Path("/bug") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    public TestCaseVO attachBugForTestCase(myDataObject myDataObject){ 

    // when deserializing to MyDataObject it thorows above error 
    //Handle logic 
    } 

Client-Seite Code-Schnipsel

var myDataObject= { 
    "testCases": [$scope.bug.TestCaseVO], 
    "userName":userName} 

angularJsMyService.Bug.attachBug({},myDataObject) 
           .$promise.then(function(data){ 
    ... 
    } 

Meine Frage also, wie kann ich mit Jackson mixin auf Parameter REST Methoden vor Jackson Deserialisieren them.Appreciate jede Hilfe.

Antwort

1

Ich denke, Sie haben Jackson wahrscheinlich nicht mit Jersey in der richtigen Weise integriert. Schauen Sie sich Jersey’s doc on Jackson an. In Ihrem Projekt sollte es eine Klasse geben, die ContextResolver<ObjectMapper> implementiert. Die ObjectMapper Instanz, die von getContext(Class<?> type) in dieser Klasse zurückgegeben wird, wird von den REST-Endpunkten von Jersey verwendet. Sie können das ObjectMapper mit Ihrem Mix-in konfigurieren.

Verwandte Themen