xml - 为 json 和 xml 的 Restful 端点设置 Spring MVC

标签 xml json spring rest spring-mvc

所以我让 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/

相关文章:

java - Android 布局中的绝对居中

xml - 将 xml 元素导入 powershell 变量

php - 如何让 FullCalendar 显示来 self 的 JSON 提要的信息?

json - 特征类型参数的隐式编码器

java - JSON 解析错误 : Can not construct instance of class

java.lang.IllegalArgumentException : Not supported: indent-number 异常

java - 如何使 ListView 可点击

java - Spring LDAP 对象目录映射器注释缺少属性

java - 有没有办法在给定字段名的情况下获取对象中某个字段的值?

java - 将 SecurityContextHolder.setContext(...) 设置为模拟,即使使用 @DirtiesContext 也会传递到不同的测试类