Я новичок в Spring, STS, MVC и веб-разработке.
У меня есть работающее веб-приложение на основе Spring REST. У меня также есть Java-клиент, который работает. Я выполнил следующие 2 урока:
- RESTful веб-сервисы с Spring
- Начало работы с Spring MVC
Что я смог сделать, так это использовать Java-клиент в том же проекте и использовать метод RestTemplate postForLocation. Оно работает! Однако сейчас я бы хотел, чтобы клиент был iPhone, и я не знаю, как это сделать. В клиенте java RestTemplate сделал сообщение, используя класс com.project.Transaction.
Пожалуйста, поправьте меня, если я здесь не прав. В файле XML атрибут restTemplate «messageConverter» получает значение jaxbMarshaller, который является классом Jaxb2Marshaller с «Transaction» в качестве одного из ограниченных классов. Я не понимаю деталей этого, но я предполагаю, что RestTemplate берет объект Transaction и маршаллизирует его в XML, который отправляется на сервер как POST-запрос.
Первый вопрос:
Есть ли какой-нибудь способ узнать, как выглядит маршаллированный объект (т.е. вывод)? Я использую STS и, пожалуйста, будьте конкретны, поскольку я новичок. Например, может быть, отправленные данные имеют вид <xml ...
?
Второй вопрос:
Я пытаюсь использовать curl, чтобы сделать такой же запрос POST, как Java-клиент. Это моя просьба:
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:
Третий квестон:
Я хотел бы быть в состоянии понять детали немного лучше. Я посмотрел исходный код RestTemplate от здесь . В нем метод postForLocation использует HttpEntityRequestCallback, который я не могу найти никакой информации в Google. Я нашел HttpHeaders в документации Java API. Однако в RestTemplate они вызывают метод getLocation (), которого нет в документации по API Java в javax.ws.rs.core -> HttpHeaders . Как я могу лучше понять это?
Я знаю, что это много вопросов. Спасибо за помощь! Дайте мне знать, если вам нужно больше фрагментов кода, и я с радостью предоставлю!
Подробнее:
TransactionController
@RequestMapping(method = RequestMethod.POST)
public View addTransaction(@RequestBody Transaction transaction)
{
transactionService.saveTransaction(transaction);
return new RedirectView("/transactionsView/"+ transaction.getId());
}