java - Jersey 2.26 REST API - Json 返回不起作用

标签 java rest jaxb jackson jersey-2.0

我有一个简单的示例,用于返回 JSON 格式的用户列表。它适用于 XML,但不适用于 JSON。 不确定我做错了什么。我还有什么需要做的吗? 我使用 jersey-quickstart (maven) 创建了该项目,并取消注释了依赖项以支持 JSON。

<dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-binding</artifactId>
        </dependency>

在我的用户域上,我有 @XmlRootElement 注释,并且只有 2 个字段。 ID(长)和用户名(字符串)

这就是我的资源:

@GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<User> getUsers(){
        return userService.getAllUsers();
    }

这就是我的服务:

public List<User> getAllUsers(){
        List<User> users = new ArrayList<User>();

        User u1 = new User(1l, "user_1");
        User u2 = new User(2l, "user_2");
        User u3 = new User(3l, "user_3");

        users.add(u1);
        users.add(u2);
        users.add(u3);

        return users;
    }

通过将 APPLICATION_JSON 更改为 APPLICATION_XML,它可以正常工作并返回带有用户列表的 xml。通过 APPLICATION_JSON 我得到这个:

SEVERE: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List<com.wordpress.whiteboardcoding.agenda.domain.User>.

除了取消注释 jersey-media-json-binding 之外,不确定是否还需要做其他事情。有什么想法吗?

尝试找出是否有不同,因为它不再使用 jersey-media-moxy。

谢谢!

最佳答案

您无法将响应 JSON 定义为 List,因为 JAXB 无法通过 java.util.List 识别 @XmlRootElement或 java.util.ArrayList 类定义。

所以,我建议包装您的用户列表。

@XmlRootElement(name = "Users")
public class Users {

    List<User> userList;

    //setters and getters goes here
}

@XmlRootElement()
class User{
   //fields here
}

而且,您的服务将是

@GET
@Produces(MediaType.APPLICATION_JSON)
public Users getUsers(){
    Users users = new Users ();
    users.setAllUsers (userService.getAllUsers());
    return users;
}

此外,请确保您已添加所有具有相同版本的库。

关于java - Jersey 2.26 REST API - Json 返回不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48070110/

相关文章:

java - 无法加载 [akka.event.Logging$Error$]

java - 使用 Speedment 手动处理交易

java - 在java中,如何将一个对象写入文件,然后从文件中读取它并将其转换回HDFS中的原始对象?

java - 使用 JAXB 和多个相同的子元素构建 XML

java - 如何在java对象的JAXB中将字段名称大写?

java - JAXB XML 解析问题

java - Kafka 生产者连接到本地主机而不是真实 IP

java - Spring Boot 数据休息 JPA : @ManyToOne not populating the ForeignKey column in DB

ios - 从 Swift 函数中的异步调用返回数据

java - OneToMany 映射在 Controller CRUD Spring Boot Rest API 中不起作用