使用Jackson异常构建RESTFul Web服务

时间:2015-12-18 23:06:57

标签: java rest jersey jackson

我在开发简单的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类有一个没有参数的空构造函数。

1 个答案:

答案 0 :(得分:0)

这不是您问题的直接答案,但如果您需要快速解决方法,可以将Jackson lib导入您的项目并手动执行序列化/反序列化。

例如,您可以检查使用jackson的this类(尽管不是最新版本)并提供您需要的功能。您只需使用以下代码将要发送的对象转换为响应:

String jsonString = ObjectTransformation.objectToJSON(object);

在你的情况下,我想这个代码将在DAO对象中的某个地方。您应该记住,通常每个对象都应包含Jackson文档中指定的一些注释。

希望这会有所帮助。