如何在Jersey Rest中以JSON形式发送响应

时间:2013-12-30 06:44:54

标签: json rest jersey jax-rs

我有Jersey Rest Webservice,服务器端代码为

    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public List<Employee> getEmployees()
    {
        return new EmployeeService().getEmployees();
    }

Ť 我正在测试chrome rest客户端的服务。  这很好用     接受:application / xml **但是当我用代码请求时      接受:application / json

我收到以下异常: -

javax.servlet.ServletException:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class com.rshekhar.domain.Employee, genericType=class com.rshekhar.domain.Employee.

这样做的正确方法是什么。

4 个答案:

答案 0 :(得分:1)

您可以使用Jersey的内置Jackson JSON库从任何POJO类自动序列化JSON。您只需要将Jackson JSON库添加到您的pom.xml:

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>${jersey.version}</version>
    </dependency>

另外,为了激活Jersey的POJO映射,您需要在web.xml中添加以下行:

    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>

然后,如果您的类方法EmployeeService().getEmployees()返回一个员工列表,Jersey会将其序列化为类似(JSON数组)

{"employees": ["name":"Adam", "name":"Robert", ....]} 

答案 1 :(得分:0)

您能否提供更多与球衣设置相关的详细信息(初学者的实体类注释)

您使用JAXB吗?哪个版本的泽西岛?

这是您的目标的良好起点:https://github.com/jasonray/jersey-starterkit/wiki/Serializing-a-POJO-to-xml-or-json-using-JAXB

答案 2 :(得分:0)

看看这里并试试这个例子。它几乎与您提到的用例完全相同。

multiple content types in jax-rs

答案 3 :(得分:0)

具有最新版本,例如1.19.1球衣。

添加以下依赖项

compile group: 'com.fasterxml.jackson.jaxrs', name: 'jackson-jaxrs-json-provider', version: '2.10.0.pr1'

在gradle中

或者如果您正在使用Maven。

<dependency>
   <groupId>com.fasterxml.jackson.jaxrs</groupId>
   <artifactId>jackson-jaxrs-json-provider</artifactId>
   <version>2.10.0.pr1</version>
</dependency>

在行家中 它将起作用。

谢谢, Praveen R。