java - 使用 @JsonInclude(NON_DEFAULT) 时 GET 上出现 DropWizard 400 错误

标签 java json jackson dropwizard

当我使用 Postman 向 games/ 发送 GET 时,收到 400 无法解析 JSON 错误。

游戏资源:

@Path("/games")
@Produces(MediaType.APPLICATION_JSON)
public class GameResource {
    @GET
    public List<Game> getGames() {
        ArrayList<Game> l = new ArrayList<Game>();
        l.add(new Game(100));
        return l;
    }
}

游戏:

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Game {
    protected int id; 
    protected int whoseTurn;
    protected int winner;
    protected char[][] board;

    public Game(int id, int turn, int winner, char[][] board) {
        this.id=id;
        this.whoseTurn=turn;
        this.winner=winner;
        this.board=board;
    }

    public int getId() {
        return id;
    }       

    public int getWhoseTurn() {
        return whoseTurn;
    }

    @JsonInclude(Include.NON_DEFAULT)
    public int getWinner() {
        return winner;
    }

    @JsonIgnore
    public char[][] getBoard() {
        return board;
    }

如果我删除 getWinner 上的注释,它就可以正常工作。为什么会这样? DropWizard 不支持 Include.NON_DEFAULT 吗?其他注释似乎工作正常...

最佳答案

除非您有一个无参数构造函数,否则 Include.NON_DEFAULT 将不起作用,例如,以下内容将起作用(没有 setter ,它相当无用)。

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;

public class Game {
    protected int id;
    protected int whoseTurn;
    protected int winner = -1;
    protected char[][] board;

    public Game() { }

    public Game(int id, int turn, int winner, char[][] board) {
        this.id = id;
        this.whoseTurn = turn;
        this.winner = winner;
        this.board = board;
    }

    public int getId() {
        return id;
    }

    public int getWhoseTurn() {
        return whoseTurn;
    }

    @JsonInclude(Include.NON_DEFAULT)
    public int getWinner() {
        return winner;
    }

    @JsonIgnore
    public char[][] getBoard() {
        return board;
    }
}

这是有效的,因为有一个默认的无参数构造函数,并且获胜者有一个默认值。 JavaDoc可能会为您提供更多帮助。

关于java - 使用 @JsonInclude(NON_DEFAULT) 时 GET 上出现 DropWizard 400 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33071397/

相关文章:

用于提取价格信息的 Java Regex

json - mongoimport 失败与 "The _id field cannot be changed from"不一致

java - 限制 Jackson REST API 的调用

java - Wildfly 和 Jackson @JsonIgnore 注释

java - 如何使用 Jackson 从 JSON 文件加载多个 HashMap

java - Spring Data Couchbase findAll(可迭代)

java - com.google.firebase.database.DatabaseException : Can't convert object of type java. lang.String 类型 com.test.consti.last.QuestionEntry

java - 如何使用 android 中的登录凭据向我的服务器进行身份验证?

javascript - 识别 jQuery load() 何时完成加载多个图像

json - 使用 IXmlSerializable 对对象进行 WCF JSON 序列化