Сериализация Spring MVC Jackson вызывает исключение NullPointer

#java #json #spring #jackson

#java #json #spring #джексон

Вопрос:

Примечание: я перепробовал почти все доступные решения, но все еще не смог заставить его работать.

Я использую Spring 4 в своем приложении. Я добавил библиотеки jackson в свой pom, как показано ниже :

 <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.2.1</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.2.1</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.2.1</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-core-asl</artifactId>
                <version>1.9.9</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.9.9</version>
            </dependency>
 

spring-config.xml выглядит так (только часть этого) :

 <mvc:annotation-driven/>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="order" value="1"/>
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes" value="application/json"/>
                </bean>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/>
                </bean>
            </list>
        </property>
    </bean>
 

Сущность (опущены получатели и установщики)

 @Entity(name="Employee")
public class Employee {

private String name;
private List<Address> addressList;

}
}
 

Я использую @ResponseBody в своем контроллере rest. Я создаю сотрудника только с именем (адрес не указан). После создания я пытаюсь вернуть тот же объект обратно в пользовательский интерфейс. Но в этом случае список адресов будет НУЛЕВЫМ. Из-за этого я получаю исключение NullPointer.

Я попытался аннотировать поле адреса с @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) помощью и @JsonInclude(JsonInclude.Include.NON_NULL) . Но в обоих этих случаях я также получаю одно и то же исключение.

Я пробовал разные способы. Если я создаю пользовательский конвертер и использую его в контроллере, он работает нормально. Но я не хочу писать этот код во всех методах контроллера.

Есть решение?

Комментарии:

1. Я этого не понимаю. Если вы предоставляете только the name , почему вы ожидаете, что the addressList будет ненулевым?

2. Почему у вас есть Jackson 1 и Jackson 2 в вашем POM-файле?

3. Вы должны создать экземпляр своего списка как ArrayList или что-то еще, как советует Hibernate.

4. @SotiriosDelimanolis: Я просто привел один сценарий. Вы можете позже добавить сведения об адресе после создания сведений о сотруднике.

5. Как выглядит ваш JSON в теле запроса? предложение @Neil, вероятно, лучшее.

Ответ №1:

Наконец, я решил создать экземпляр коллекции с ArrayList помощью in the entities, и теперь он работает нормально. Ни один из других способов не сработал.