gpt4 book ai didi

java - 泽西 + jetty + JSON

转载 作者:太空宇宙 更新时间:2023-11-04 06:17:25 26 4
gpt4 key购买 nike

我想使用 Jetty + Jersey 生成 JSON。我的 POM.XML 类似于这篇文章:How do I update example to work with latest versions Jetty (9.1.0.RC2) and Jersey (2.7)? 。我想我缺少一些依赖。 inferFile() 的结果返回空白。

我可以看到 Student 类中的 toStirng 方法没有被调用。

Maven

<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 完成的。基本上,他们正在寻找具有编码器/解码器已知的某种形式的注释的字段,或者 Java bean 样式的 getter 和 setter。这就是发现 JSON 数据/属性的方式。

例如,如果您的学生看起来像

public class Student {

private String firstName;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}
}

它会给你像 {"firstName":"MyFirstName"} 这样的 JSON。您只需要设置属性即可

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

因此您不必单独配置每个类。该值应该是一个包。它将扫描包和子包中带注释的类。

关于java - 泽西 + jetty + JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27909056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com