首页 > 解决方案 > REST API Response.ok(entity).build() 不显示文本

问题描述

我正在为学校练习创建一个简单的 Restful API,但遇到了问题。当我尝试在网页上显示实体列表或仅显示单个实体时,它不显示任何文本。它似乎确实找到了正确的实体(当我过滤时,它显示了正确的实体数量),它只是不显示文本。也许它不运行 ToString?但我的 ToString 方法没有发现任何问题。

这是一个例子:

在我的 UserResources 中返回用户的函数:

@GET //GET at http://localhost:XXXX/users/1
    @Path("{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getUserPath(@PathParam("id") int Id) {
        User user = fakeDatabase.getUser(Id);
        if (user == null) {
            return Response.status(Response.Status.BAD_REQUEST).entity("Please provide a valid user ID.").build();
        } else {
            return Response.ok(user).build();
        }
    }

FakeDatabase 中的 getUser:

public User getUser(int userId) {
        for (User user : userList) {
            if (user.GetUserId() == userId) {
                return user;
            }
        }
        return null;
    }

用户ToString:

@Override
    public String toString() {
        String WishlistItems = "";
        for(String item : Wishlist){
            WishlistItems = WishlistItems + item + ", ";
        }

        return "User (" + UserId + ") {" + "\n" +
                "Email Address = " + EmailAddress + "\n" +
                "UserName = " + UserName + "\n" +
                Platform.toString() + " ID = " + PlatformID + "\n" +
                "Wishlist :" + WishlistItems + "\n" +
                "}" + "\n";
    }

我在网站上得到的结果:

在此处输入图像描述

有人知道这个问题的解决方案吗?

编辑:完整的用户类(我也更新了 toString 方法):

@XmlRootElement
public class User {
    private int UserId;
    private String UserName;
    private String EmailAddress;
    private int PasswordHash;
    private Platform Platform;
    private String PlatformID;
    private ArrayList<String> Wishlist = new ArrayList<String>();

    public User(int userId, String Password, String emailAddress, String userName, Platform platform, String platformID){
        UserId = userId;
        EmailAddress = emailAddress;
        UserName = userName;
        Platform = platform;
        PlatformID = platformID;
        hashPassword(Password);
    }

    public User(){

    }

    public int GetUserId(){
        return UserId;
    }

    public String GetUserName(){
        return UserName;
    }

    public void SetUserName(String UserName){
        this.UserName = UserName;
    }

    public String GetEmailAddress(){
        return EmailAddress;
    }

    public void SetEmailAddress(String EmailAddress){
        this.EmailAddress = EmailAddress;
    }

    public Platform GetPlatform(){
        return Platform;
    }

    public void SetPlatform(Platform Platform){
        this.Platform = Platform;
    }

    public String GetPlatformID(){
        return PlatformID;
    }

    public void SetPlatformID(String PlatformID){
        this.PlatformID = PlatformID;
    }

    public void AddToWishlist(String item){
        Wishlist.add(item);
    }

    public ArrayList<String> GetWishlist(){
        return Wishlist;
    }

    public void SetWishlist(ArrayList<String> Wishlist){
        this.Wishlist = Wishlist;
    }

    public void hashPassword(String Password) {
        PasswordHash = Objects.hash(Password);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return UserId == user.GetUserId();
    }

    @Override
    public String toString() {
        String WishlistItems = "";
        for(String item : Wishlist){
            WishlistItems = WishlistItems + item + ", ";
        }

        return "User (" + UserId + ") {" + "\n" +
                "Email Address = " + EmailAddress + "\n" +
                "UserName = " + UserName + "\n" +
                Platform.toString() + " ID = " + PlatformID + "\n" +
                "Wishlist :" + WishlistItems + "\n" +
                "}" + "\n";
    }
}

标签: javaspring-bootrestintellij-ideatostring

解决方案


您使用 Spring Boot 标记了您的问题,但 Spring Boot 代码看起来确实不同。试试这样的东西:

@GetMapping("/users/{id}")
public ResponseEntity<User> getUserPath(@PathVariable("id") int Id) {
    User user = fakeDatabase.getUser(Id);
    if (user == null) {
        return ResponseEntity.badRequest().body("Please provide a valid user ID.");
    } else {
        return ResponseEntity.ok(user);
    }
}

推荐阅读