У меня есть контроллер отдыха:запрос Spring Rest Контроллер POST не работает
@RestController
@RequestMapping("/query")
public class QueryController {
@Autowired
private QueryService queryService;
@RequestMapping(value = "/select", method = RequestMethod.POST)
public @ResponseBody QueryResultDTO executeQuery(@RequestBody QueryDTO queryDTO) {
try {
QueryResultDTO queryResultDTO = queryService.executeQuery("select * from employees");
queryResultDTO.setSuccessful(true);
return queryResultDTO;
} catch (SQLException e) {
QueryResultDTO queryResultDTO = new QueryResultDTO();
queryResultDTO.setSuccessful(false);
queryResultDTO.setErrorMessage(e.getMessage());
return queryResultDTO;
}
}
}
и я пытаюсь отправить запрос POST от контроллера AngularJS:
app.controller("AppCtrl",function($scope,$http) {
var app = this;
$scope.execute= function() {
$http({
url: '../query/select',
method: "POST",
data: { 'message' : $scope.queryText }
})
.then(function(response) {
$scope.queryResult = response.data;
console.log($scope.queryResult);
console.log($scope.queryText)
},
function(response) {
console.log(response);
});
}
});
, но он не работает. Моя функция executeQuery
в Spring Controller даже не называется.
Но когда я меняю RequestMethod на GET, он работает правильно.
@RestController
@RequestMapping("/query")
public class QueryController {
@Autowired
private QueryService queryService;
@RequestMapping(value = "/select", method = RequestMethod.GET)
public @ResponseBody QueryResultDTO executeQuery() {
try {
QueryResultDTO queryResultDTO = queryService.executeQuery("INSERT INTO employee VALUES (7,'dupa')");
queryResultDTO.setSuccessful(true);
return queryResultDTO;
} catch (SQLException e) {
QueryResultDTO queryResultDTO = new QueryResultDTO();
queryResultDTO.setSuccessful(false);
queryResultDTO.setErrorMessage(e.getMessage());
return queryResultDTO;
}
}
}
и в угловых контроллерах:
app.controller("AppCtrl",function($scope,$http) {
var app = this;
$scope.execute= function() {
$http({
url: '../query/select',
method: "GET",
data: { 'message' : $scope.queryText }
})
.then(function(response) {
$scope.queryResult = response.data;
console.log($scope.queryResult);
console.log($scope.queryText)
},
function(response) {
console.log(response);
});
}
});
Моей главная проблема в том, что я хотел бы отправить некоторые данные на мой контроллер Spring, а затем отправить JSON
в ответ на мой угловой контроллер. Wheth GET
метод отклика работает отлично, но когда я использую POST
, метод контроллера даже не называется.
Edit:
Мой QueryDTO
класс прост:
public class QueryDTO {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
А некоторые журналы с DEBUG
уровне:
2016-06-06 09:28:23.697 DEBUG 7504 --- [nio-8090-exec-2] o.s.web.servlet.DispatcherServlet : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2016-06-06 09:28:23.698 DEBUG 7504 --- [nio-8090-exec-2] o.s.web.servlet.DispatcherServlet : Successfully completed request
Каковы требуемые атрибуты для QueryDTO? Отправьте его код. Вы пытались сделать явным ответ? Определение [производит param] (http://pastebin.ubuntu.com/17053353/). – Lucio
Наконец, вы также можете попробовать изменить фирму, добавив [параметр запроса] (http://pastebin.ubuntu.com/17053491/). – Lucio
Как выглядит ваш QueryDTO? Вы проверяли журналы, если преобразователь сообщений Spring конвертирует JSON в QueryDTO. –