2016-03-31 1 views
0

Я следующее отображение Спринг контроллера:Пружина контроллер 400 плохо запрос и применение/х-WWW-форм-urlencod в/с приложения/JSON

@RequestMapping(value="/isSomethingHappening", method = RequestMethod.POST) 
public @ResponseBody JsonResponse isSomethingHappening(HttpServletRequest httpRequest,@RequestParam("employeeId") String employeeId, 
     ModelMap model) throws IOException{ 

Если я ссылаться на это, как показано ниже, то я получаю 400 ответа.

var requestData = {"employeeId":XYZ.application.employeeId}; 

      XYZ.network.fireAjaxRequestAsync("application/json", "forms/testing/isSomethingHappening", requestData, function(response, status, xhr){ 

Но если я вызываю это, как показано ниже, я получаю ответ успеха.

var requestData = {"employeeId":XYZ.application.employeeId}; 

      XYZ.network.fireAjaxRequestAsync("application/x-www-form-urlencoded", "forms/testing/isSomethingHappening", requestData, function(response, status, xhr){ 

Я понял, исправление, но я не могу понять, почему первый один дал мне ошибку, когда объект мои данные запроса var requestData = {"employeeId":XYZ.application.employeeId}; остались неизменными, и я просто изменил тип содержимого. Мне application/json выглядит более подходящий тип контента, потому что мои данные запроса являются объектами JSON.


Кроме того, у меня есть другие случаи, когда мое отображение контроллера, как показано ниже:

@RequestMapping(value = "/getOnFlyResults", method = RequestMethod.POST) 
    public @ResponseBody JsonResponse getOnFlyResults(HttpServletRequest httpRequest, 
      @RequestBody testingRequestVO testingRequestVO, ModelMap modelMap) throws IOException{ 

И для вызова этого я отправить запрос, как показано ниже:

var requestData = {"employeeId":XYZ.application.employeeId, 
         "fName":XYZ.application.fName, 
         "lName": XYZ.application.lName, 
         "telephoneNumber":telephoneNumber, 
         "testMode":XYZ.constant.onFly}; 

      XYZ.network.fireAjaxRequestAsync("application/json", "forms/testing/startTest", JSON.stringify(requestData), function(response, status, xhr){ 

Я не понять, почему мне приходится строгать данные с помощью JSON.stringify(requestData), если я этого не сделаю, тогда я получу 400.

После того, как я стягиваю, он становится строкой, тогда мой тип содержимого должен быть text/plain, но он работает с application/json

Обратите внимание, что я знаю, что исправления кода, но я хочу понять концепцию. Я прочитал this, и он не объясняет концепцию в деталях и запросах, которые у меня есть.

+0

У вас есть библиотека jackson, настроенная как зависимость для вашего приложения? – pczeus

+0

@pczeus Nops ... – hagrawal

+0

Использование Maven? Gradle? – pczeus

ответ

1

Обычно используется библиотека Джексона в приложении Spring для обработки JSON. Если вы используете Ant, попробуйте добавить Джексона в свои библиотеки.

Вы можете скачать библиотеку Джексона непосредственно из Maven Central. Вот блок зависимостей Maven примера (но получить самую последнюю версию):

<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.13</version> 
</dependency> 

Убедитесь, что у вас есть аннотации управляемого тег в конфигурации Spring:

<annotation-driven /> 

С или без Джексона, он может также помогают указать, что конечная точка контроллера производит или потребляет JSON;

@RequestMapping(value="/getjson", 
    produces=MediaType.APPLICATION_JSON_VALUE, consumes=MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody MyObject getJSON(){ 
    return new MyObject(); 
} 
+0

Спасибо, за ваш ответ. Я сказал, что я исправил все вопросы, связанные со всем этим, меня больше интересуют понятия. – hagrawal

+0

Если вас интересуют понятия, я бы очень рекомендовал заглянуть в Spring Boot. Если вы посмотрите на начальную страницу, вы увидите, как легко вставать и запускаться с помощью веб-службы REST: http://projects.spring.io/spring-boot/ – pczeus

+0

Это объясняет, как делать что-то весной , это не объясняло бы концепций, которые я ищу. – hagrawal

 Смежные вопросы

  • Нет связанных вопросов^_^