首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JSON (JSON处理器)和XML (XStream)之间切换,还是可以同时使用?

在JSON (JSON处理器)和XML (XStream)之间切换,还是可以同时使用?
EN

Stack Overflow用户
提问于 2011-09-19 19:44:15
回答 2查看 3.4K关注 0票数 0

我正在尝试构建一个可以将对象序列化为JSON和XML的Web-Server。由于我已经集成了Jackson (使用一个示例-Project),所以我能够通过我的REST接口访问JSON序列化的对象,但我也想获得XML。

这..。

代码语言:javascript
复制
@Controller
@RequestMapping("/main/ajax")
public class AjaxController {

@RequestMapping(value = "/blah", method = RequestMethod.GET, headers = "Accept=application/xml")
public @ResponseBody List<String> blah(@RequestParam(value="input") String input){

            List<String> stringList = new LinkedList<String>();
            stringList.add("i");
            stringList.add("am");
            stringList.add("an");
            stringList.add("json object");
            stringList.add(input);

            return stringList;
    }
 }

点击此查询:

代码语言:javascript
复制
http://localhost:8080/spring-json/krams/main/ajax/blah?input=foobar

生成该输出:

代码语言:javascript
复制
["i","am","an","json object","foobar"]

有什么提示吗?

更新#1:我实现了ContentNegotiatingViewResolver...

代码语言:javascript
复制
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  <property name="order" value="1" />

  <property name="mediaTypes">
    <map>
      <entry key="json" value="application/json" />
      <entry key="xml" value="application/xml" />
    </map>
  </property>

  <property name="defaultViews">
    <list>

      <!-- JSON View -->
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />

      <!-- XML View --> 
      <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
         <constructor-arg>
          <bean class="org.springframework.oxm.xstream.XStreamMarshaller" />
        </constructor-arg>
      </bean>  

    </list>
  </property>

  <property name="ignoreAcceptHeader" value="true" />
</bean>

<!-- If no extension matched, use JSP view -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="order" value="2" />
  <property name="prefix" value="/WEB-INF/jsp/"/>
  <property name="suffix" value=".jsp"/>
</bean>

现在如何选择XML或JSON?localhost:8080/spring-json/sometestclass/status?localhost:8080/spring-json/sometestclass/status.xml?localhost:8080/spring-json/sometestclass/status.json?

上面的例子都不起作用,但是我可以用Accept-header "application/xml“或"application/json”强制响应格式...如果我执行以下操作...

代码语言:javascript
复制
@RequestMapping(value = "/status", method = RequestMethod.GET, headers = "Accept=application/xml, application/json")
public @ResponseBody Web_ServerStatus isServerAlive() {
    Web_ServerStatus l_ReturnObj = new Web_ServerStatus();

...i只返回XML。

我遇到的问题是什么?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-20 22:40:33

解决方案:

代码语言:javascript
复制
@RequestMapping(value = "/status", method = RequestMethod.GET)
public Web_ServerStatus isServerAlive() {
  ...
}

没有"@ResponseBody“

票数 0
EN

Stack Overflow用户

发布于 2011-09-19 19:56:15

是的,看看ContentNegotiatingViewResolver (因为您将spring作为标记包括在内)。

这里有一个链接:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-multiple-representations

但是,REST并不意味着XML。根据客户端的Accept标头和服务的功能,您可以用不同的方式呈现资源。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7470388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档