Сообщение Java Spring Restcontroller

Мне нужна помощь в создании POST-запроса к моему Java Spring Restcontroller.

Это мой контроллер -

@RestController
@RequestMapping("hedgesimulator/")
public class HedgeSimulatorController {

    @RequestMapping(value = "hedgesim/", method = RequestMethod.POST)
    @ResponseBody
    public HedgeSimulatorLog putHedgeSimulation(
        @RequestBody HedgeSimulatorLog hedgeSimulatorLog) {

        System.out.println(hedgeSimulatorLog.toJsonString());
        return hedgeSimulatorLog;
    }
}

Я использую плагин Chrome «Advanced Rest Client» для POST моего запроса на мой URL-адрес (я уверен, что мой локальный хост работает правильно и т. д.)

Что мне нужно добавить в заголовок?

Я получаю сообщение об ошибке «HTTP 400 — отчет о состоянии: запрос, отправленный клиентом, был синтаксически неправильным».

Пожалуйста помоги!


person mikepetretta    schedule 18.05.2015    source источник
comment
Возможно, вы захотите установить уровни ведения журнала Spring MVC на DEBUG, а также проверить журналы доступа к серверу для получения дополнительной информации о выполняемом запросе. Похоже, что запрос неправильный - возможно, также попробуйте выполнить запрос с помощью curl или другого инструмента командной строки. Наконец, я думаю, что @ResponseBody избыточен в @RestController.   -  person cjstehno    schedule 18.05.2015
comment
Я думаю, что полезная нагрузка запроса не может быть преобразована в bean-компонент HedgeSimulatorLog. Можете ли вы опубликовать bean-компонент HedgeSimulatorLog и образец полезной нагрузки JSON?   -  person K. Siva Prasad Reddy    schedule 19.05.2015


Ответы (4)


Чтобы передать объект контроллеру, вы должны настроить HttpMessageConverter, который выполняет сериализацию и десериализацию этого объекта. Например, если вы хотите передать объект контроллеру как JSON, установите параметр MappingJackson2HttpMessageConverter в качестве параметра в объявлении mvc в файле конфигурации spring.

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>

Если конвертер http-сообщений настроен правильно, возможно, запрос был неправильно сформирован.

person Lea32    schedule 18.05.2015

@RequestMapping (значение = "/hedgesim/", метод = RequestMethod.POST)

person Pankaj    schedule 18.05.2015

Попробуйте следующее, надеюсь, вы сможете решить проблему:

  1. Поскольку вы используете аннотацию @RestController, вам не нужно снова использовать аннотацию @ResponseBody, что является излишним.

  2. Если вы используете весеннюю загрузку, убедитесь, что вы добавили приведенную ниже зависимость.

     <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  3. Если проект не является весенней загрузкой, добавьте зависимость для jackson: com.fasterxml.jackson.databind.ObjectMapper

  4. Просто чтобы убедиться, что тело запроса правильное, вы можете сначала выполнить метод запроса, получить ответ JSON, передать тот же JSON для POST, чтобы это могло избежать некоторых опечаток/человеческих ошибок при создании данных JSON.

Надеюсь, поможет.

person Rakesh    schedule 13.02.2016

Вы можете выполнить следующие проверки.

  1. Проверьте текст запроса, который вы отправляете, с помощью онлайн-инструмента, такого как JSonLint.
  2. Проверьте, зарегистрирован ли MappingJackson2HttpMessageConverter или нет. По умолчанию Spring регистрирует этот преобразователь, если у вас есть jar в пути к классам.
  3. Нет необходимости использовать @ResponseBody, если вы используете @RestController. Так что удалите его.

Полный пример создания и использования службы REST с помощью Spring 4.0 можно найти на странице Techno. Пятна.

person RLD    schedule 30.07.2016