json - 使用 Jersey 在 REST Web 服务中返回 JSON 时,找不到媒体类型 = application/json 的 MessageBodyWriter

标签 json rest jersey

我正在尝试使用 Jersey 创建一个非常简单的 REST 服务。这是服务代码

@Path("/UserService")
public class UserService {

    @GET
    @Path("/users")
    @Produces(MediaType.APPLICATION_XML)
    public List<User> getUsers() {
        User user = new User(1, "Thomas", "Greene");
        List<User> userList = new ArrayList<User>();
        userList.add(user);
        return userList;
    }
}

当我通过 Postman 运行它时,它返回给我一个 XML 响应

XML response in Postman

现在,我想返回一个 JSON 响应。因此,我将媒体类型更改为 application/json :

@Path("/UserService")
public class UserService {

    @GET
    @Path("/users")
    @Produces(MediaType.APPLICATION_JSON)
    public List<User> getUsers(){ 
        User user = new User(1, "Thomas", "Greene");
        List<User> userList = new ArrayList<User>();
        userList.add(user);
        return userList;
   }    
}

它在 Tomcat 日志中给了我以下错误:

SEVERE: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List.



有人可以指导我如何获得 JSON 响应吗?

最佳答案

要使用 Jackson 2.x 作为您的 JSON 提供程序,您需要添加 jersey-media-json-jackson 模块到您的pom.xml文件:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.22.2</version>
</dependency>

然后注册 JacksonFeature 在您的 Application / ResourceConfig 子类。

有关更多详细信息,请查看 Jersey documentation .

关于json - 使用 Jersey 在 REST Web 服务中返回 JSON 时,找不到媒体类型 = application/json 的 MessageBodyWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37250131/

相关文章:

jersey - 引导 Jersey 2(使用 Jetty)的正确方法是什么?

java - JSONObject 未检查调用 put(K,V) 作为原始类型 java.util.HashMap 的成员

axis2 vs spring-ws vs Jersey

json - 将 JSON 文件拆分为单独的文件

python - Django Rest Framework 和 Stripe,最佳实践?

rest - 经过身份验证的 REST api 的 HTTP 缓存

java - 安卓到休息: cannot serialize java Date

java - 如何使用 Gradle 运行 Jetty

c# - 将 JSON 对象属性反序列化为字符串

php - Xcode 7 beta swift 使用未解析的标识符