Tôi đang cố tạo một dịch vụ web dựa trên mùa xuân đơn giản hỗ trợ "bài đăng" có nội dung xml.đăng xml lên máy chủ Spring REST trả về Loại phương tiện không được hỗ trợ
Vào mùa xuân, tôi xác định một AnnotationMethodHandler:
<bean id="inboundMessageAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list>
<bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<property name="marshaller" ref="xmlMarshaller"/>
<property name="unmarshaller" ref="xmlMarshaller"/>
</bean>
</util:list>
</property>
</bean>
Và một jaxb dựa xml marshaller:
<bean id="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPaths">
<array>
<value>com.company.schema</value>
</array>
</property>
<property name="schemas">
<array>
<value>classpath:core.xsd</value>
</array>
</property>
</bean>
điều khiển của tôi được chú thích như sau, trong đó "Resource" là một lớp autogenerated bởi jaxb :
@RequestMapping(method = POST, value = "/resource")
public Resource createResource(@RequestBody Resource resource) {
// do work
}
Kết quả của cuộc gọi webservice luôn là "HTTP/1.1 415 Med không được hỗ trợ ia Type ". Đây là cuộc gọi dịch vụ mẫu:
HttpPost post = new HttpPost(uri);
post.addHeader("Accept", "application/xml");
post.addHeader("Content-Type", "application/xml");
StringEntity entity = new StringEntity(request, "UTF-8");
entity.setContentType("application/xml");
post.setEntity(entity);
Dường như với tôi rằng tôi đang đặt đúng loại phương tiện ở mọi nơi có thể. Bất cứ ai có một ý tưởng?
Chỉnh sửa: sau khi gỡ lỗi tiếp theo, có vẻ như nó không bao giờ bị lệch như cố gắng loại bỏ đối tượng. Tôi không hoàn toàn hiểu được ma thuật đen đằng sau cách AnnotationMethodHandler biết rằng một cái gì đó của ứng dụng kiểu/xml nên đi đến MarshallingHttpConverter. Có ai có thể làm sáng tỏ điều đó không?
Cảm ơn bạn đã đề xuất, skaffman. Tôi kiểm tra và lớp thực sự có thẻ @XMLRootElement. –
@Mayra: Và 'Tài nguyên' nằm trong gói 'com.company.schema'? Hãy thử viết một bài kiểm tra đơn vị để xây dựng một 'Jaxb2Marshaller' với cấu hình của bạn, và đảm bảo' support (Resource.class) 'trả về' true'. Điều đó cần phải làm việc trước khi bạn có thể nhận được thêm bất kỳ. – skaffman
Không có súc sắc, tôi đã tạo một đối tượng Jaxb2Marshaller, đặt contextPath và lược đồ như tôi có trong tệp spring của mình và nó nói nó hỗ trợ lớp của tôi. –