Tôi đang sử dụng MappingJacksonHttpMessageConverter của Spring để chuyển đổi thông điệp JSON thành đối tượng trong bộ điều khiển của tôi.Deserialize ArrayList từ String sử dụng Jackson
<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>
Đối với các trường được khai báo là ArrayList, nếu thông điệp json chứa một chuỗi thay vào đó, các ngoại lệ sau đây sẽ được ném:
org.springframework.http.converter.HttpMessageNotReadableException:
Could not read JSON: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
Một ví dụ sẽ định nghĩa lớp dưới đây:
public class Product {
private String name;
private List<String> images;
}
Nơi Json đến là:
{name:"Widget", images:"image1.jpg"}
Như bạn có thể thấy, điều này sẽ tạo ra ngoại lệ vì hình ảnh được mong đợi là một mảng.
Tôi muốn tạo trình tùy chỉnh deserializer dễ chịu hơn một chút. Nếu deserialization không thành công, hãy tạo một ArrayList của một phần tử đơn lẻ từ String. Làm thế nào tôi sẽ đi về tiêm này vào MappingJacksonHttpMessageConverter hoặc ObjectMapper?
Tôi không tìm cách sử dụng chú thích để đánh dấu từng và mọi trường ArrayList để có thể sử dụng deserialize tùy chỉnh. Tôi đang tìm cách ghi đè trình khử dịch mặc định để tạo sẵn chức năng này.
chuỗi ban đầu bạn đang cố gắng để deserialize là gì? –
nói rằng đó là {product: "1234"} thay vì {product: ["1234"]} – ltfishie
và bạn đang cố gắng deserialize nó như thế nào? Bạn có thể đăng một số mã không? –