2013-09-11 3 views
2

Привет.

У меня есть странная проблема, с которой я изо всех сил боролся целый день.

У меня есть модуль Angular JS (приложение) и контроллер. В этом контроллере я ввожу фабрику, которая обрабатывает мой метод http.post. (Что я называю «doSearch»). Все идет нормально.

На заднем конце у меня есть класс api spring-mvc rest api. Это выглядит следующим образом:

@Controller 
@RequestMapping("/api/filesearch") 
public class FileSearchAPI { 

    @RequestMapping(value = "/search", method = RequestMethod.POST) 
    @ResponseBody 
    public ResultDTO doSearch(@RequestBody NewPerfectSearchDTO searchDTO) { 
      System.out.println(searchDTO.getIdentifier()); 
      SolrService solrService = new SolrService(); 
      //return solrService.query(searchDTO); 
      return new ResultDTO(); 
    } 
} 

И это функция, которая отправляет некоторые JSON, который будет сопоставлен с JAVA POJO/DTO:

doSearch: function(searchParams) { 
     $http.post("/np/api/filesearch/search", JSON.stringify({identifier: "apa", inputRows: []})).success(function(response) { 
      console.log(response); 
      return response; 
     }).error(function(data, status, headers, config) { 
       console.log(status, headers, config); 
     }); 
    } 

принять к сведению полезной нагрузки (Да, это статическое для этого примера): JSON.stringify({identifier: "apa", inputRows: []})

Это прекрасно отображает мой DTO. Поля правильные, а переменная inputRows - пустой инициализированный массив.

ОДНАКО, когда я смотрю на полезную нагрузку (с помощью Firebug или хромированную инспектор), отправленного клиентом, к API, это выглядит следующим образом: {"identifier":"apa","inputRows":"[]"}

Вы заметили "" вокруг моего JSON массив?

{"identifier":"apa","inputRows":"[]"} 
           ^^ 
           | | 

Да ... Это проблема, с которой я сталкиваюсь. Когда я отправляю этот запрос, сервер просто отвечает на HTTP 400, неверный синтаксис (страница с ошибкой Tomcat/Spring), запрос даже не вызывает APIController на внутреннем сервере.

Итак, что я пытался до сих пор (без успеха):

  • Я попытался без использования JSON.stringify() на полезной нагрузке, с тем же результатом
  • Я попытался указать заголовки в моем APIController (нет смысла, это не даже и не выполнить этот код, прежде чем выбросить ошибку)
  • Я попытался с помощью Java.util.List вместо массива в DTO

Так что я довольно сильно застрял здесь. Любая помощь будет оценена по достоинству.

+2

Как я подозревал, может быть интересное поведение stringify: http://stackoverflow.com/questions/710586/json-stringify-bizarreness –

+0

Вы можете передать данные как объект, angularjs будет сериализовать его сам. Попробуйте метод без использования json.stringify – Chandermani

+0

Пожалуйста, снова прочитайте вопрос, я заявил, что пробовал без JSON.stringify, но я все равно получаю тот же результат. @Chandermani –

ответ

2

Похоже, что у вас конфликтующая prototype.js зависимость, переопределяющая некоторые функции.

Я хотел бы попробовать

delete Array.prototype.toJSON 

перед отправкой вашего объекта.

+0

Спасибо, это сработало! Я не проверял, включен ли старый prototype.js ... Это было так. Думал, что нет. –

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