球衣 + 码头 + JSON
Jersey + Jetty + JSON
我想使用 Jetty + Jersey 制作一个 JSON。
我的 POM.XML 类似于此 post:How do I update example to work with latest versions Jetty (9.1.0.RC2) and Jersey (2.7)?。我想我缺少一些依赖性。 inferFile() 的结果返回空白。
我可以看到 Student class 的 toStirng 方法没有被调用。
行家
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.1.3.v20140225</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.1.3.v20140225</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.14</version>
</dependency>
Java
public class Student {
public Student(){
}
@Override
public String toString(){
return new StringBuffer(" First Name : ").append("MY FIRST NAME").toString();
}
}
@Path("/bulkload")
public class BulkLoadAPI {
@POST
@Path("inference")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public Student inferFile() throws URISyntaxException, IOException {
Student s = new Student();
return s;
}
}
public static void main(String[] args) throws Exception {
ServletHolder jerseyServlet = new ServletHolder(ServletContainer.class);
jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", "service.api.BulkLoadAPI");
jerseyServlet.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
Server server = new Server(10500);
ServletContextHandler context = new ServletContextHandler (server, "/", Servl etContextHandler.SESSIONS);
context.addServlet(jerseyServlet, "/*");
server.start();
server.join();
}
我不太确定你在期待什么。如果您期望 toString()
被调用(实际上不是),那甚至不会产生有效的 JSON。 POJO 到 JSON(反之亦然)的转换是通过 MessageBodyReaders 和 MessageBodyWriters 完成的。基本上,他们正在寻找具有某种形式的注释的字段,这些注释为 marshaller/unmarshaller 或 Java bean 样式的 getter 和 setter。这就是如何发现 JSON 的 data/properties。
例如,如果您的 Student
看起来像
public class Student {
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
它会给你 JSON 就像 {"firstName":"MyFirstName"}
。您只需要设置 属性
public Student inferFile() throws URISyntaxException, IOException {
Student s = new Student();
s.setFirstName("MyFirstNaem");
return s;
}
还有一点,这个不需要
setInitParameter("com.sun.jersey.api.json.POJOMappingFeature","true");
这是 Jersey 1 的一项功能。您正在使用 Jersey 2。另请参阅
jersey.config.server.provider.packages
因此您不必单独配置每个 class。该值应该是一个包。它将扫描包和子包以查找带注释的 classes.
我想使用 Jetty + Jersey 制作一个 JSON。 我的 POM.XML 类似于此 post:How do I update example to work with latest versions Jetty (9.1.0.RC2) and Jersey (2.7)?。我想我缺少一些依赖性。 inferFile() 的结果返回空白。
我可以看到 Student class 的 toStirng 方法没有被调用。
行家
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.1.3.v20140225</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.1.3.v20140225</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.14</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.14</version>
</dependency>
Java
public class Student {
public Student(){
}
@Override
public String toString(){
return new StringBuffer(" First Name : ").append("MY FIRST NAME").toString();
}
}
@Path("/bulkload")
public class BulkLoadAPI {
@POST
@Path("inference")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public Student inferFile() throws URISyntaxException, IOException {
Student s = new Student();
return s;
}
}
public static void main(String[] args) throws Exception {
ServletHolder jerseyServlet = new ServletHolder(ServletContainer.class);
jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", "service.api.BulkLoadAPI");
jerseyServlet.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
Server server = new Server(10500);
ServletContextHandler context = new ServletContextHandler (server, "/", Servl etContextHandler.SESSIONS);
context.addServlet(jerseyServlet, "/*");
server.start();
server.join();
}
我不太确定你在期待什么。如果您期望 toString()
被调用(实际上不是),那甚至不会产生有效的 JSON。 POJO 到 JSON(反之亦然)的转换是通过 MessageBodyReaders 和 MessageBodyWriters 完成的。基本上,他们正在寻找具有某种形式的注释的字段,这些注释为 marshaller/unmarshaller 或 Java bean 样式的 getter 和 setter。这就是如何发现 JSON 的 data/properties。
例如,如果您的 Student
看起来像
public class Student {
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
它会给你 JSON 就像 {"firstName":"MyFirstName"}
。您只需要设置 属性
public Student inferFile() throws URISyntaxException, IOException {
Student s = new Student();
s.setFirstName("MyFirstNaem");
return s;
}
还有一点,这个不需要
setInitParameter("com.sun.jersey.api.json.POJOMappingFeature","true");
这是 Jersey 1 的一项功能。您正在使用 Jersey 2。另请参阅
jersey.config.server.provider.packages
因此您不必单独配置每个 class。该值应该是一个包。它将扫描包和子包以查找带注释的 classes.