#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
, почему вы ожидаете, что theaddressList
будет ненулевым?2. Почему у вас есть Jackson 1 и Jackson 2 в вашем POM-файле?
3. Вы должны создать экземпляр своего списка как ArrayList или что-то еще, как советует Hibernate.
4. @SotiriosDelimanolis: Я просто привел один сценарий. Вы можете позже добавить сведения об адресе после создания сведений о сотруднике.
5. Как выглядит ваш JSON в теле запроса? предложение @Neil, вероятно, лучшее.
Ответ №1:
Наконец, я решил создать экземпляр коллекции с ArrayList
помощью in the entities, и теперь он работает нормально. Ни один из других способов не сработал.