[SPRING] Jackson을 사용하여 String에서 ArrayList를 deserialize합니다.
SPRINGJackson을 사용하여 String에서 ArrayList를 deserialize합니다.
Spring의 MappingJacksonHttpMessageConverter를 사용하여 JSON 메시지를 컨트롤러의 객체로 변환합니다.
<bean id="jsonConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="prefixJson" value="false" />
<property name="supportedMediaTypes" value="application/json" />
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>
ArrayList로 선언 된 필드의 경우 json 메시지에 String이 포함되어 있으면 다음 예외가 throw됩니다.
org.springframework.http.converter.HttpMessageNotReadableException:
Could not read JSON: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
다음은 클래스 정의입니다.
public class Product {
private String name;
private List<String> images;
}
들어오는 Json이있는 곳 :
{name:"Widget", images:"image1.jpg"}
보시다시피 image가 배열이 될 것으로 예상되므로 예외가 발생합니다.
좀 더 관대 한 맞춤 디시리얼라이저를 만들고 싶습니다. 직렬화 복원이 실패했을 경우, String로부터 단일의 요소의 ArrayList를 작성합니다. 이것을 MappingJacksonHttpMessageConverter 나 ObjectMapper에 주입하는 방법은 무엇입니까?
주석을 사용하여 각 및 모든 ArrayList 필드를 표시하지 않으므로 사용자 지정 deserialize를 사용할 수 있습니다. 이 기능을 수행하기 위해 기본 디시리얼라이저를 덮어 쓰는 방법을 찾고 있습니다.
해결법
-
==============================
1.Jackson objectMapper의 기능을 사용하여이를 수행하는 방법을 설명하는이 기사를 확인하십시오.
Jackson objectMapper의 기능을 사용하여이를 수행하는 방법을 설명하는이 기사를 확인하십시오.
https://github.com/FasterXML/jackson-dataformat-xml/issues/21
나를 위해 다음 문제를 해결하면이 문제가 해결됩니다.
jsonMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
-
==============================
2.늘어나는만큼 내가 들어오는 JSON 어떤 배열을 포함하지 않습니다. 질문 : "이미지"가 분리되어 있어야하나요? 아니면 하나의 이미지가 포함되어 있습니까? 쉼표로 구분되어 있다고 가정 해 보겠습니다.
늘어나는만큼 내가 들어오는 JSON 어떤 배열을 포함하지 않습니다. 질문 : "이미지"가 분리되어 있어야하나요? 아니면 하나의 이미지가 포함되어 있습니까? 쉼표로 구분되어 있다고 가정 해 보겠습니다.
public class Product { private String name; private List<String> images; @JsonProperty("images") public String getImagesAsString() { StringBuilder sb = new StringBuilder(); for (String img : images) { if (sb.length() > 0) sb.append(','); sb.append(img); } return sb.toString(); } public void setImagesAsString(String img) { this.images = Arrays.asList(img.split(",")); } @JsonIgnore public List<String> getImages() { return images; } }
from https://stackoverflow.com/questions/10247639/deserialize-arraylist-from-string-using-jackson by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Java 8에서도 Spring 데이터 저장소 메소드 매개 변수 이름을 사용할 수없는 이유는 무엇입니까? (0) | 2019.02.18 |
---|---|
[SPRING] 잭슨은 스프링의 인터페이스 목록으로 객체를 비 직렬화한다. (0) | 2019.02.18 |
[SPRING] 스프링을 사용하여 서블릿에 객체를 삽입하고 싶습니다. (0) | 2019.02.18 |
[SPRING] Spring HandlerInterceptorAdapter postHandle이 보장됩니까? (0) | 2019.02.18 |
[SPRING] AngularJS - 404 로그 아웃시 스프링 보안 (0) | 2019.02.18 |