带有hibernate的Spring mvc,如何添加一个宁静的服务端点?

时间:2011-11-22 02:59:02

标签: java spring rest spring-mvc

所以我有一个spring mvc并运行hibernate。

我正在阅读如何使用@ResponseBody添加Restful端点:http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/

所以,如果我有一个端点,如:

http://localhost:8080/services/user/get/1

我将获取userId = 1的用户,我将如何返回以及如何将我的用户对象转换为XML表示?

我是否必须在我的User.java类中执行一些特殊操作才能使其正常工作?

3 个答案:

答案 0 :(得分:1)

我过去这样做的方式如下:

  • 使用JAXB annotations为您的User课程添加注释(例如@XmlRootElement

  • 勾搭合适的春季HttpMessageConverter as in this documentation

  • 发送请求时,请确保包含Accept标头:Accept: application/xml

通过这样做,您可以完全控制User如何“扁平化”为XML,但是您将把所有艰苦工作(确定正确的端点,数据转换)留给Spring。 / p>

答案 1 :(得分:1)

将使用@ResponseBody注释的方法返回类型转换为实际的HTTP响应是通过HttpMessageConverter接口的实现来完成的。 Spring带有implementation for JAXB。因此,如果您可以使用JAXB注释注释User类,那么这可能对您有用。如果User是一个Hibernate注释实体,那么向它添加JAXB也会变得毛茸茸。您可能想要为JAXB创建一个中间对象。

或者,您可以使用Marshalling Message Converter使用任意Marshaller。内置了Marshaller的很多实现可供选择,或者您可以随时编写自己的实现。

您可以通过在AnnotationMethodHandlerAdapter上注册转换器(在调度程序servlet中使用xml:

<bean id="xmlMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter">
    <property name="supportedMediaTypes" value="text/xml" />
</bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="xmlMessageConverter"/>
        </list>
    </property>
</bean>

答案 2 :(得分:0)

Spring MVC与XStream集成(将对象转换为XML)

这是一种有趣的方法:http://www.stupidjavatricks.com/?p=54

您必须在类中设置XStreamAlias注释并将Spring配置为使用XStream。

我还指出Spring输出是xml。在您的网址示例中应该是:

http://localhost:8080/services/user/get/1.xml