java - 如何使用 Spring MVC 从 POST 请求返回 XML 响应?

标签 java spring post spring-mvc

我正在发出一个发送 JSON 的 POST 请求。 Controller 获取 JSON,处理 JSON,我希望 Controller 以 XML 格式返回一些数据。

如何通过 POST 请求来做到这一点?

@RequestMapping( value = Controller.RESOURCE_PATH + ".xml", headers = "Accept=application/json", produces = "*/*" )
public String exportXml( @RequestBody String requestJson ) throws IOException
{
    JSONObject json = JSONObject.fromObject( requestJson );
    Option option = new Option();
    option.processJson( json );

    return "";
}

最佳答案

有很多方法可以实现这一目标。一是使用MarshallingView和XStreamMarshaller

首先将以下 jar 添加到您的类路径(maven 依赖项):

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-oxm</artifactId>
  <version>${org.springframework-version}</version>
</dependency>
<dependency>
  <groupId>com.thoughtworks.xstream</groupId>
  <artifactId>xstream</artifactId>
  <version>1.4.4</version>
</dependency>

然后在 spring xml 配置上配置 Marshaller

<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"/>

假设您有以下要编码(marshal)的 bean(即:显示为 XML)

public class MyMessage {
  private String message;

  // getters & setters
}

在您的 Controller 类中注入(inject) org.springframework.oxm.Marshaller 并让您的处理程序方法返回一个 MarshallingView,如下所示:

@Controller
public class MyController {

  @Autowired private Marshaller marshaller;

  @RequestMapping("/helloxml")
  public MarshallingView helloxml(Model model) {
    MyMessage msg = new MyMessage();
    msg.setMessage("hello world");
    model.addAttribute("msg", msg);

    MarshallingView marshallingView = new MarshallingView(marshaller);
    marshallingView.setModelKey("msg"); // set what model attribute to display as xml

    return marshallingView;
  }
}

当请求 /helloxml 时,上述设置将为您提供这样的 xml

<com.gerrydevstory.xmlview.MyMessage>
  <message>hello world</message>
</com.gerrydevstory.xmlview.MyMessage>

当然,如果您处理许多 XML 编码,这不是一个很好的设置。在这种情况下,您应该利用 View 解析器配置。

XML 元素的名称也可以使用别名来缩短它。查看 XStream 文档

最后,请记住 XStream 只是 Spring 支持的众多编码器之一,还请考虑 JAXB、Castor、Jibx 等。

关于java - 如何使用 Spring MVC 从 POST 请求返回 XML 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17665390/

相关文章:

java - 两个对象上的 assertEquals()

java - 为什么 Google Guava 在存在等效构造函数的情况下提供静态方法?

java - 认证请求到/j_spring_security_check 404错误

java - org.springframework.web.servlet.DispatcherServlet noHandlerFound 用于基本的 spring 示例

php - JSON 不将数组数据传递给 PHP

php - 我如何在数组中转换 $_POST?

java - 存储过程 'XXX' 只能在 JBOSS 7 服务器/JCONN 驱动程序4 中的非链式事务模式下运行错误

java - 在 "dispose()"内的 Music 对象上使用 "OnCompletionListener()"?

java - 将服务自动连接到 Controller 代理错误

php - 如何在 PHP 中提取通过 Python 发送的 gzip POST 请求