2016-05-15 2 views
0

JSON - ДЖЕКСОН - Parser Issue:Read JSON Payload как для логического типа

Проблема: Когда пользователь переходит 0 для булевой переменной в Payload парсер JSON строит его как FALSE, если клиент передает какой-либо значение больше нуля. Я получаю TRUE в своем POJO. Мне нужно, чтобы я/JACKSON Parser должен был выкинуть ошибку для любого значения, кроме - TRUE/true/FALSE/false для переменной Boolean в моем POJO.

ДЖЕКСОН JAXB анализатор бросает ошибку для любой булевой переменной, если пользователь проходит как - «ABC»/«1234», но не числовые номера, т.е. он принимает 0/1/123 и т.д. ...

Как установить парсеры, чтобы бросить ошибки для чисел?

Спасибо заранее.

+0

Вы можете создать настраиваемое исключение в установщике, если значение ничего, кроме true или false, если вы используете привязку Джексона к Java bean – tyagi

+0

Исправленная грамматика, форматирование света – LoicTheAztec

ответ

0

Решение этой проблемы просто связано с настройкой Serializing DeSerializing поведения библиотеки Jackson.
В конструкторе мы можем предоставить конфигурацию десериализации (-ов) вместе с настроенными десериализаторами.

public class CustomObjectMapper extends ObjectMapper { 

    public CustomObjectMapper() { 
     }  
} 

Подготовьте объект SimpleDeserializers.

SimpleDeserializers simpleDeserializers = new SimpleDeserializers(); 

Теперь мы подготовили булевский десериализатор для того же самого, нашего индивидуального.

private class BooleanDeserializer<T extends Object> extends 
JsonDeserializer<Boolean> { 
final protected Class<?> _valueClass = Boolean.class; 

@Override 
public Boolean deserialize(JsonParser jp, DeserializationContext ctxt) 
throws IOException, JsonProcessingException { 
// TODO Auto-generated method stub 
return _parseBooleanPrimitive2(jp, ctxt); 
} 

protected final boolean _parseBooleanPrimitive2(JsonParser jp, 
DeserializationContext ctxt) throws IOException, 
JsonProcessingException { 
JsonToken t = jp.getCurrentToken(); 
if (t == JsonToken.VALUE_TRUE) { 
return true; 
} 
if (t == JsonToken.VALUE_FALSE) { 
return false; 
} 
if (t == JsonToken.VALUE_STRING) { 
String text = jp.getText().trim(); 
if ("true".equals(text)) { 
return true; 
} 
if ("false".equals(text)) { 
return Boolean.FALSE; 
} 

throw ctxt.weirdStringException(_valueClass, 
"only \"true\" or \"false\" recognized"); 
} 
// Otherwise, no can do: 
throw ctxt.mappingException(_valueClass); 
} 
} 

Это логическое десериализатор является обобщен классом подклассов JsonDeserializer, который поставляется для обработки десериализации значений, которые, как правило, не поддерживаемых булева по умолчанию десериализатора в.

+0

Спасибо Tanvi, можете ли вы более конкретно с кодом Java , Как, я не уверен, как/где использовать «SimpleDeserializers simpleDeserializers = new SimpleDeserializers()» вы можете добавить ясный Java-код здесь PLS? также вы ссылаетесь на использование этого нового класса как cfg в моем классе mapper? ObjectMapper(). SetDeserializationConfig ("CFG") – dakasreenivasa

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