我如何在HTTP请求中发送对象

时间:2012-11-22 19:47:17

标签: java spring rest soap

我正在创建一个 Web服务,它将正确处理传入请求(我知道,这是一个描述)我找到了一些示例代码,它们呈现 SOAP WS 并且看起来像:

    @SoapAction("some fine url")
    @ResponsePayload
    public CertResponse  getCert(@RequestPayload Cert param) 
    {...}

从请求中获取Cert个对象并正确管理它。我想在REST方法中做到这一点,我将这个类更改为:

    @RequestMapping(value="getCert", method = RequestMethod.POST)
    @ResponseBody
    public CertResponse  getCert(@RequestBody Cert param) 
    {...} 

但是我不知道如何编写可以通过HTTP Post发送对象的客户端。

任何人都可以给我一个提示,我该如何发送对象Cert?或者,如果我必须留在@SoapAction我该怎么做才能使其发挥作用?我想删除@Controller是不够的。

3 个答案:

答案 0 :(得分:2)

在SOAP方法中,有一种定义良好的方法可以将每个类对象转换为SOAP格式的XML。因此,没有努力。

如果您将使用RESTful方法,则必须描述如何将Cert或CertResponse对象写入/读取响应/请求。

基本上你有三个选择:

  1. 使用JSON或XML或纯String。转换您的Web服务描述符,以便请求和响应是其中之一(JSON,XML,String)。然后,您的getCert方法应将请求转换为Cert对象,将您的响应准备为CertResponse对象并将其转换为适当的响应类型。

  2. 保持您的getCert方法不变。但是您需要指定“如何从请求中读取Cert对象”和“如何将CertResponse对象写入响应”您需要定义扩展接口MessageBodyReader和MessageBodyWriter的类。在这些类中,应实现类似的转换逻辑,将对象转换为JSON或XML或String。

    在这两个选项中的任何一个中,您需要实现两件事:将JSON / XML / String转换为Cert的方法,这是一种将CertResponse对象转换为JSON / XML / String的方法。

    您可以执行基于文本的实现,该实现通过文本处理来解析/构造请求/响应,并仅使用String类。或者您可以使用一些库,例如带有JSONObject类的JSON库,或Java捆绑包附带的Java SAX或基于DOM的XML库。

  3. 查看Spring等应用程序框架。他们可能会提供自动将对象转换为JSON或XML的方法,从而减少必要的编程工作量。

答案 1 :(得分:1)

Spring 允许您从客户端传递JSON对象作为请求参数,它会自动将它们转换为您的对象。 This讨论有一些例子。

答案 2 :(得分:1)

SOAP服务与REST语义并不真正兼容。并且不清楚你使用什么SOAP框架。通常,大多数SOAP框架都以某种方式为您生成WSDL的SOAP客户端代码。你可以查看cxf.apache.org。 对于REST服务,使用Jersey或Spring MVC

之类的东西