2015-10-11 4 views
0

Я получаю ошибку 400 unable to parse JSON, когда я отправляю GET на games/, используя Postman.Ошибка DropWizard 400 при GET при использовании @JsonInclude (NON_DEFAULT)

GameResource:

@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, он отлично работает. Почему это может быть? Include.NON_DEFAULT не поддерживается DropWizard? Другие аннотации, похоже, работают нормально ...

+0

Вы создаете объект Game, используя конструктор «new Game (100)», но я не вижу его в коде. Есть ли еще код для класса Game? –

ответ

4

Include.NON_DEFAULT не будет работать, если у вас нет конструктора no-arg, например, следующее будет работать (без сеттеров это бесполезно).

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; 
    } 
} 

Это работает, потому что есть конструктор no-arg по умолчанию, а победитель имеет значение по умолчанию. JavaDoc может предоставить вам дополнительную помощь.

Смежные вопросы