2016-05-15 2 views
1

У меня есть ниже JsonSpring загрузки джексон - десериализует JSon с корнем имени

{ 
    "user": { 
     "name": "Ram", 
     "age": 27 
    } 
} 

, который я хочу, чтобы де-сериализовать в экземпляр класса

public class User { 
    private String name; 
    private int age; 

    // getters & setters 
} 

Для этого я использовал @JsonRootName по имени класса и что-то вроде ниже

@Configuration 
public class JacksonConfig { 

    @Bean 
    public Jackson2ObjectMapperBuilder jacksonBuilder() { 
     Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); 
     builder.featuresToEnable(DeserializationFeature.UNWRAP_ROOT_VALUE); 
     return builder; 
    } 
} 

Но он не работает, как ожидалось. Если я отправлю что-то вроде ниже, это сработало.

{ 
"name": "Ram", 
"age": 27 
} 

Но я хочу, чтобы json де-сериализовался с корневым именем. Может ли кто-нибудь предложить?

Я хочу, чтобы весна загрузилась.

+0

Возможный дубликат [Jackson JSON десериализации с корневым элементом] (http://stackoverflow.com/questions/11704255/jackson-json-deserialization-with-root-element) – Mifeet

+0

Может вы публикуете, как мы можем настроить его, используя весеннюю загрузку? –

+0

Правильно, возможно, ваша проблема не дублируется. – Mifeet

ответ

-1

С помощью ObjectMapper вы можете легко решить эту проблему. Вот что вы должны сделать: - Авторство класс пользователя, как указано ниже

@JsonRootName("user") 
    public class User { 
    private String name; 
    private int age; 

     // getters & setters 
    } 
  • Создать класс CustomJsonMapper

    общественного класса CustomJsonMapper расширяет ObjectMapper {

    private DeserializationFeature deserializationFeature; 
    
        public void setDeserializationFeature (DeserializationFeature deserializationFeature) { 
         this.deserializationFeature = deserializationFeature; 
         enable(this.deserializationFeature); 
        } 
    } // This is spring configuration /*<bean id="objectMapper" 
         class=" com.cognizant.tranzform.notification.constant.CustomJsonMapper"> 
         <property name="deserializationFeature" ref="deserializationFeature"/> 
        </bean> 
        <bean id="deserializationFeature" class="com.fasterxml.jackson.databind.DeserializationFeature" 
         factory-method="valueOf"> 
         <constructor-arg> 
          <value>UNWRAP_ROOT_VALUE</value> 
         </constructor-arg> 
        </bean>*/ 
    
  • Используя следующий код, который вы могут быть испытаны

    ApplicationContext context = new ClassPathXmlApplicationContext ( "applicationContext.xml"); ObjectMapper objectMapper = (ObjectMapper) контекст .getBean ("objectMapper"); Строка json = "{\" user \ ": {\" name \ ": \" Ram \ ", \" age \ ": 27}}"; Пользователь user = objectMapper.readValue (json, User.class);

+0

Можете ли вы опубликовать, как вы можете это сделать, используя весенний ботинок? –

0

@JsonRootName - хорошее начало. Используйте эту аннотацию на User класса, а затем включите UNWRAP_ROOT_VALUE функцию десериализации, добавив:

spring.jackson.deserialization.UNWRAP_ROOT_VALUE=true 

к вашему application.properties. Подробнее о настройке Джексона картографа в Spring Boot Reference

+0

Возможно ли это сделать на основе маршрута, а не устанавливать его для всего приложения? –

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