我在开发简单的REST端点时遇到了问题。我正在使用Glassfish 4.1.1作为服务器。当我部署应用程序并运行localhost:8080 / HelloRest / students / 1时,我得到此异常
Warning: StandardWrapperValve[org.stefan.ApplicationConfig]: Servlet.service() for servlet org.stefan.ApplicationConfig threw exception java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.persistence.jaxb.BeanValidationHelper
这些是我的配置:
package org.stefan;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
@ApplicationPath("rest/")
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
packages("org.stefan","com.fasterxml.jackson.jaxrs.json");
}
}
这是我的资源类:
package org.stefan;
import java.util.List;
import javax.ws.rs.PathParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/students")
public class StudentResource {
StudentDAO dao=new StudentDAO();
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Student> findAll() {
return dao.findAll();
}
@GET @Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Student findById(@PathParam("id") String id) {
return dao.findById(Integer.parseInt(id));
}
}
这些是我使用的两个依赖项:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.22.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.6.4</version>
</dependency>
我在互联网上做了很多研究,并没有提出解决方案。我确定有些东西必须添加到我的配置中或者是错误的。但这只是暂时不起作用,所以决定提出一个问题。另外,我的Student类有一个没有参数的空构造函数。
答案 0 :(得分:0)
这不是您问题的直接答案,但如果您需要快速解决方法,可以将Jackson lib导入您的项目并手动执行序列化/反序列化。
例如,您可以检查使用jackson的this类(尽管不是最新版本)并提供您需要的功能。您只需使用以下代码将要发送的对象转换为响应:
String jsonString = ObjectTransformation.objectToJSON(object);
在你的情况下,我想这个代码将在DAO对象中的某个地方。您应该记住,通常每个对象都应包含Jackson文档中指定的一些注释。
希望这会有所帮助。