2012-11-22 33 views
0

我创建一个Web服务将妥善处理传入的请求(我知道,这是一个说明),我发现其中存在SOAP WS,看起来像一些示例代码:我怎样才能在HTTP请求发送对象

@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邮寄对象。

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

回答

2

在SOAP方法中,将每个类对象转换为SOAP格式的XML都有一个明确的方法。因此,没有努力。

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

基本上,你有三种选择:

  1. 使用JSON或XML或纯字符串。转换您的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

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

1

SOAP服务并不真正与REST语义兼容。目前还不清楚您使用的是什么SOAP框架。通常,大多数SOAP框架为您提供了一种或另一种方式为您的WSDL生成SOAP客户端代码。你可以检查cxf.apache.org。 对于REST服务,使用类似Jersey或Spring的MVC