Привет.
У меня есть странная проблема, с которой я изо всех сил боролся целый день.
У меня есть модуль 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
Так что я довольно сильно застрял здесь. Любая помощь будет оценена по достоинству.
Как я подозревал, может быть интересное поведение stringify: http://stackoverflow.com/questions/710586/json-stringify-bizarreness –
Вы можете передать данные как объект, angularjs будет сериализовать его сам. Попробуйте метод без использования json.stringify – Chandermani
Пожалуйста, снова прочитайте вопрос, я заявил, что пробовал без JSON.stringify, но я все равно получаю тот же результат. @Chandermani –