Запрос POST curl возвращает ошибку syantactic на сервере Spring tc - PullRequest
1 голос
/ 25 августа 2011

Я новичок в Spring, STS, MVC и веб-разработке.

У меня есть работающее веб-приложение на основе Spring REST. У меня также есть Java-клиент, который работает. Я выполнил следующие 2 урока:

  1. RESTful веб-сервисы с Spring
  2. Начало работы с 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());
    }

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Ваш xml неверен:

<transaction><amount>3.1</amount><id>5</id><paid>true</id></transaction>
                                                      ^^^ should be /paid
0 голосов
/ 30 августа 2011

Оказывается, я должен использовать одинарные кавычки для данных.После --data "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...