【发布时间】:2011-08-25 19:04:17
【问题描述】:
我是 Spring、STS、MVC 和 Web 开发的新手。
我有一个工作的基于 Spring REST 的 Web 应用程序。我也有一个可以工作的 java 客户端。我遵循了这两个教程:
我能够做的是在同一个项目中使用 java 客户端并使用 RestTemplate postForLocation 方法。有用!但是,现在我希望客户端是 iPhone,但我不知道该怎么做。在 java 客户端中,RestTemplate 使用 com.project.Transaction 类进行了发布。
如果我在这里错了,请纠正我。在 XML 文件中,restTemplate“messageConverter”属性设置为 jaxbMarshaller,它是一个 Jaxb2Marshaller 类,其中“Transaction”是有界的类之一。我不了解它的详细信息,但我假设 RestTemplate 采用 Transaction 对象并将其编组为 XML,该 XML 作为 POST 请求发送到服务器。
第一个问题:
有什么方法可以让我看到编组的对象(即:输出)的样子?我正在使用 STS,因为我是新手,所以请具体说明。例如,可能发送的数据类似于<xml ...?
第二个问题: 我正在尝试使用 curl 发出与 java 客户端类似的 POST 请求。这是我的 curl 请求:
curl -X POST -H 'Accept:application/xml' -H 'Content-Type: application/xml' http://localhost:8080/BarcodePayment/transactions/ --data "<?xml version="1.0" encoding="UTF-8"?><transaction><amount>3.1</amount><id>5</id><paid>true</id></transaction>"
当我这样做时,我会收到一条 STATUS 400: 语法错误消息。
第三个问题: 我希望能够更好地理解细节。我从here 查看了 RestTemplate 的源代码。在其中,postForLocation 方法使用了 HttpEntityRequestCallback,我在 Google 中找不到任何信息。我在 java API 文档中找到了 HttpHeaders。但是,在 RestTemplate 中,它们调用了 javax.ws.rs.core -> HttpHeaders 下的 Java API 文档中不存在的 getLocation() 方法。我怎样才能更好地理解这些东西?
我知道这是很多问题。谢谢您的帮助!如果您需要更多代码 sn-ps,请告诉我,我很乐意提供!
详情: 事务控制器
@RequestMapping(method = RequestMethod.POST)
public View addTransaction(@RequestBody Transaction transaction)
{
transactionService.saveTransaction(transaction);
return new RedirectView("/transactionsView/"+ transaction.getId());
}
【问题讨论】: