为json和xml的静态端点设置Spring MVC [英] Setting up Spring MVC for restful endpoints, for both json and xml

查看:101
本文介绍了为json和xml的静态端点设置Spring MVC的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆