Как я могу получить данные от spring controller от ajax?
у меня есть ajax
на jsp
страница, которая вызывает контроллер spring через URL /check
.
$.ajax({
type : "GET",
url : "${pageContext.request.contextPath}/check",
data : {
"id" : ${articleCount}
},
success: function(data){
//response from controller
}
});
теперь контроллер выглядит так:
@RequestMapping("/check")
public String check(@RequestParam Integer id, HttpServletRequest request,
HttpServletResponse response, Model model) {
boolean a = getSomeResult();
if (a == true) {
model.addAttribute("alreadySaved", true);
return view;
} else
model.addAttribute("alreadySaved", false);
return view;
}
Я отправил данные с помощью модели и попытался получить к ней доступ в success: function(data)
as "${alreadySaved}"
но он показывает пустой.
есть ли способ получить это true/false
данные на странице просмотра?
4 ответов
вы должны добавить аннотацию @ResponseBody для примера вызовов spring ajax
@RequestMapping("/check")
@ResponseBody
public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) {
boolean a = getSomeResult();
if (a == true) {
model.addAttribute("alreadySaved", true);
return view;
} else {
model.addAttribute("alreadySaved", false);
return view;
}
}
часть контроллера
вы должны добавить аннотацию @ResponseBody для примера вызовов spring ajax
Часть
$.ajax({
type : "GET",
url : "${pageContext.request.contextPath}/check",
data : {
"id" : ${articleCount}
},
success: function(data){
$('#input_field').val(data);
}
});
когда вы пытаетесь вернуть значения из запроса ajax, вы должны использовать @ResponseBody
Примечание . Поскольку ваш метод возвращает тип String
убедитесь, что вы возвращаете строковое значение, а не свое представление в jsp.
так как он будет отображать jsp снова ответ
@ResponseBody
public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) {
boolean a = getSomeResult();
if (a == true) {
return "already saved";
}
return "error exist";
}
и в вашем jsp,
success: function(data){
alert(data);
}
использовать @ResponseBody
Spring свяжет возвращаемое значение с исходящим телом ответа HTTP при добавлении @ResponseBody
Примечание.
@ResponseBody
public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) {
boolean a = getSomeResult();
if (a == true) {
return "already saved";
}
return "error exist";
}
Spring будет использовать преобразователи HTTP-сообщений для преобразования возвращаемого значения в тело ответа HTTP [сериализация объекта в тело ответа] на основе типа контента, используемого в заголовке HTTP запроса.
дополнительные info:
http://websystique.com/springmvc/spring-mvc-requestbody-responsebody-example/