Как указать значения по умолчанию для десериализации Джексона - PullRequest
0 голосов
/ 23 января 2019
@ResponseBody
@RequestMapping(value="/getUser")
public JSONObject getContent(@ReqeustBody User user) 

Здесь мой код контроллера.

@Data
public class User{
    private String username = "administrator";
    private String password = "123456";   
    private Integer age = 18;
}

Здесь мой код класса User.

{
    "username":"admin",
    "password":"000",
    "age":""
}

Когда я POST JSONвыше, я получаю свойство age равным null.

Я хочу, чтобы Jackson десериализовал пустые поля ("" или null) в JSON со значениями по умолчанию.

Вот так:

{
    "username":"admin",
    "password":"000",
    "age":18
}

Что мне делать?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете определить собственное свойство получателя, где устанавливаете значение по умолчанию в случае null.

   public Integer getAge() {
        if (age == null) {
            return 18;
        } else {
            return this.age;
        }
    }

Обратите внимание, что вы не можете изменить метод setAge, потому что в этом случае он не вызывается, потому что нет поля age, которое сообщит Джексону о необходимости вызова этого метода.


Альтернативой является использование пользовательского конструктора и использование аннотации JsonSetter со значением Nulls.SKIP

Значение, которое указывает, что входное нулевое значение должно быть пропущено, и никакое присвоение не должно быть выполнено; это обычно означает, что свойство будет иметь значение по умолчанию .

следующим образом:

 public class User {
    @JsonSetter(nulls = Nulls.SKIP)
    private Integer age;

    public User() {
        this.age = 18;
    }

    ...
}

@JsonSetter присутствует в пакете com.fasterxml.jackson.annotation и может быть импортирован как зависимость в maven с помощью

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>YOURVERSION</version>
</dependency>
0 голосов
/ 23 января 2019

Один из подходов - заставить вас setAge обрабатывать случай null, например:

 void setAge(Integer age){
   if(age!=null) this.age = age;
 }

Или вы можете взглянуть на @JsonSetter(nulls=Nulls.SKIP), я только что посмотрел на исходный кодЯ не пробовал: (

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...