2015-02-11 85 views
4

我正在和Jersey一起玩Grizzly,希望能夠使用和生成JSON,但是我在服務器中獲取500請求和媒體類型不支持POST 我的服務器代碼是使用球衣和灰熊啓用JSON

org.glassfish.jersey.server.ResourceConfig rc = new ResourceConfig(); 
    rc.packages("RestServer.controllers"); 

    final Map<String, Object> initParams = new HashMap<String, Object>(); 
    initParams.put("com.sun.jersey.config.property.packages", "rest"); 
    initParams.put("com.sun.jersey.api.json.POJOMappingFeature", "true"); 

    rc.addProperties(initParams); 

    webServer = GrizzlyHttpServerFactory.createHttpServer(uri, rc, false); 

我的POJO是:

@XmlRootElement 
public class Dummy { 

    private int id; 
    private String name; 

    public Dummy(int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    @XmlElement(name="id") 
    public int getId() { 
     return id; 
    } 

    @XmlElement(name = "name") 
    public String getName() { 
     return name; 
    } 
} 

和控制器

@Path("/Dummies") 
public class DummyController { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response get() { 
     System.out.println("Get"); 
     return Response.status(Status.OK) 
      .entity(new Dummy(-1, "hello")) 
      .build(); 
    } 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response AddDummy(Dummy dummy) { 
     return Response.status(Status.CREATED).entity(dummy).build(); 
    } 
} 

回答

13

您使用2新澤西州澤西2,有沒有com.sun.jersey.api.json.POJOMappingFeaturecom.sun.jersey.config.property.packages,這樣你就可以擺脫那些的。

要爲POJO啓用JSON,我們需要一個MessageBodyWriter/MessageBodyReader(請參閱更多here)。幸運的是,我們不需要自己寫這些。您只需要依賴項(請參閱here)。

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>${jersey2.version}</version> 
</dependency> 

這個依賴將拉入所需的傑克遜MessageBodyReader/MessageBodyWriter。然後只需配置它

resourceConfig.register(JacksonFeature.class); 
+1

天知道爲什麼澤西不斷改變他們的方法名稱,爲什麼這不被接受爲最佳答案...就像一個魅力。謝謝。 – thermz 2015-04-28 13:21:53