Как я могу получить данные от 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/