我正在玩 Grizzly 托管的 Jersey,并且希望能够使用和生成 JSON,但是我在 get 请求中从服务器收到 500,并且 POST 中不支持媒体类型
我的服务器代码是
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();
}
}
您正在使用 Jersey 2。在 Jersey 2 中,有is no com.sun.jersey.api.json.POJOMappingFeature
and com.sun.jersey.config.property.packages
,这样你就可以摆脱那些。
为了启用 JSON 到 POJO 或从 POJO 接收 JSON,我们需要一个MessageBodyWriter/MessageBodyReader
(查看更多here https://jersey.java.net/documentation/latest/message-body-workers.html)。幸运的是,我们不需要自己编写这些。你只需要一个依赖项(参见here https://jersey.java.net/documentation/latest/media.html#json).
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey2.version}</version>
</dependency>
这种依赖关系将引入所需的 JacksonMessageBodyReader/MessageBodyWriter
。然后配置一下就可以了
resourceConfig.register(JacksonFeature.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)