为json和xml的静态端点设置Spring MVC [英] Setting up Spring MVC for restful endpoints, for both json and xml
问题描述
所以我让json工作,有人可以以json形式发布对象,而我的控制器方法将其映射到实际的java对象.我的spring config xml看起来像:
So I got json working where someone can post an object in json form, and my controller method maps that to the actual java object. My spring config xml looks like:
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list id="beanList">
<ref bean="jsonMessageConverter"/>
</util:list>
</property>
</bean>
一种有效的测试控制器方法如下:
And a test controller method that works is like:
@ResponseBody
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String create(@RequestBody User user, HttpServletRequest request, HttpServletResponse response) {
return user.getName();
}
现在,如果我也希望使用完全相同的方法来处理xml,这可能吗? 我要使用哪个消息转换器?
Now if I want the exact same method to work with xml also, is this possible? Which message converter do I use?
顺便说一句,如果我想保留某些私有属性,我该怎么做,使其对json和xml都适用?
BTW, if I want to keep certain properties of private, how can I do that so it works for both json and xml?
例如说我有一个密码属性,我不希望任何人都可以发布此信息.
e.g. say I have a password property, I don't want anyone being able to post this information.
推荐答案
我正在使用Spring 3.1,这就是我正在做的事情. 在dispatcher-servelet.xml
I'm using Spring 3.1 and this is how I'm doing. In dispatcher-servelet.xml
<bean id="jacksonObjectMapper" class="com.parth.web.CustomJacksonMapper"/>
<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="aliases">
<props>
<prop key="event">com.parth.model.Event</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.parth.model.Event</value>
</list>
</property>
</bean>
<oxm:jaxb2-marshaller id="jaxb2Marshaller">
<oxm:class-to-be-bound name="com.parth.model.Event"/>
</oxm:jaxb2-marshaller>
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter" p:marshaller-ref="xstreamMarshaller" p:unmarshaller-ref="xstreamMarshaller"/>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" p:objectMapper-ref="jacksonObjectMapper" />
</mvc:message-converters>
</mvc:annotation-driven>
在Controller中,
And in Controller,
@RequestMapping(value="/",method= RequestMethod.GET)
@ResponseBody
public List<Event> getAllEvents(@RequestParam("userId") String userId, HttpServletResponse response){
return eventService.getAll(userId);
}
现在,当您从客户端发出HTTP请求时,请确保将Accept
标头设置为appliction/json or application/xml
.
Now, when you make HTTP request from client make sure you set Accept
header either with appliction/json or application/xml
.
对于省略字段,您可以使用注释@JsonIgnore
(对于Jackson)和/或@XStreamOmitField
(对于XStream).
As far as omitting fields, you cans use annotations @JsonIgnore
(for Jackson) and/or @XStreamOmitField
(for XStream).
确保您的类路径中有Jackson和XStream jar.
Make sure you have Jackson and XStream jars in your class path.
这篇关于为json和xml的静态端点设置Spring MVC的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!