Свойство Json принимает любое значение типа данных как строковое значение - PullRequest
0 голосов
/ 06 июля 2018

У меня есть несколько полей String, и когда я отправляю логические или целочисленные значения через JSON, фреймворк принимает его как String.

public class Author implements Serializable{

 private static final long serialVersionUID= -319383931931231L;

 @JsonProperty("name")
 private String name;

 private String getName()
  { return name;}

 private void setName(String name)
 { this.name=name;}

}

Пример JSON: {"name": true} Таким образом, имя будет «правда», а не правда. Дело в том, что я не хочу, чтобы он принимал какой-либо другой тип данных, кроме String (поэтому, если я отправляю логическое или целочисленное значение, я хочу, чтобы он выдавал ошибку).

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Написание собственного десериализатора сработало для меня.

    public class Deserializer extends JsonDeserializer<String>{
      @Override
      public String deserialize(JsonParser jp, DeserializationContext desCtx)
      {  if(jp.getCurrentToken() == JsonToken.VALUE_NUMBER_INT)
           throw desCtx.wrongTokenException(jp, JsonToken.VALUE_STRING,"Attempted to insert int");
         if(jp.getCurrentToken() == JsonToken.VALUE_FALSE)
           throw desCtx.wrongTokenException(jp, JsonToken.VALUE_STRING,"Attempted to insert false value");
         if(jp.getCurrentToken() == JsonToken.VALUE_TRUE)
           throw desCtx.wrongTokenException(jp, JsonToken.VALUE_STRING,"Attempted to insert true value");
         return jp.getValueAsString();
      }
}

Затем я сослался на это в своем классе с аннотацией @JsonDeserialize(using=Deserializer.class)

0 голосов
/ 06 июля 2018

Похоже, что нет никакого параметра конфигурации, чтобы отключить такое автоматическое преобразование. Вы можете написать собственный десериализатор. Отметьте этот выпуск в репозитории Джексона

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