所以我让 json 工作起来,有人可以以 json 形式发布一个对象,并且我的 Controller 方法将其映射到实际的 java 对象。我的 spring 配置 xml 如下所示:
<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>
有效的测试 Controller 方法如下:
@ResponseBody
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String create(@RequestBody User user, HttpServletRequest request, HttpServletResponse response) {
return user.getName();
}
现在,如果我也希望使用完全相同的方法来处理 xml,这可能吗? 我应该使用哪个消息转换器?
顺便说一句,如果我想保留某些私有(private)属性,我该怎么做才能使其同时适用于 json 和 xml?
例如假设我有一个密码属性,我不希望任何人能够发布此信息。
最佳答案
我正在使用 Spring 3.1,这就是我正在做的事情。 在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 中,
@RequestMapping(value="/",method= RequestMethod.GET)
@ResponseBody
public List<Event> getAllEvents(@RequestParam("userId") String userId, HttpServletResponse response){
return eventService.getAll(userId);
}
现在,当您从客户端发出 HTTP 请求时,请确保使用 appliction/json 或 application/xml
设置 Accept
header 。
就省略字段而言,您可以使用注释 @JsonIgnore
(对于 Jackson)和/或 @XStreamOmitField
(对于 XStream)。
确保您的类路径中有 Jackson 和 XStream jar。
关于xml - 为 json 和 xml 的 Restful 端点设置 Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14078331/