【问题标题】:How to return a Boolean value from a Spring MVC controller to ajax?如何将布尔值从 Spring MVC 控制器返回到 ajax?
【发布时间】:2015-11-01 00:57:08
【问题描述】:

我正在使用一个 Spring MVC 控制器,它将返回一个布尔值作为对 ajax 请求的响应。但是,当 spring mvc 试图返回一个布尔值时,它给了我 服务器响应状态为 406(不可接受)错误请帮助。提前致谢

这是我的控制器

@Controller
public class MainController {
    @RequestMapping(value="/check.html",method=RequestMethod.POST)
    public @ResponseBody Boolean checkValue(){
        return true;
    }
}

这是我的 Ajax 方法

<script type="text/javascript">
    function doAjax() {
        $.ajax({
            type : "post",
            url : 'check.html',
            success : function(response) {
                if(response===true)
                {
                    window.alert("true");
                }
                else
                {
                    window.alert("false");
                }
            },
            error : function(e){
                window.alert("error");
            }
        });
    }
</script>

【问题讨论】:

    标签: jquery ajax spring spring-mvc


    【解决方案1】:

    我认为一些原始值可能不是valid JSON。在这种情况下,我通常会返回一个类似于 {"status": true} 的地图。

    【讨论】:

      【解决方案2】:

      我在向 AJAX 请求返回字符串时遇到了同样的问题。但我使用 HttpServletResponse 对象解决了它。你也可以这样做。

      @RequestMapping(value="/check.html",method=RequestMethod.POST)
      public @ResponseBody void checkValue(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){
      
          /*Your Logic*/
          httpServletResponse.getWriter().println(true);
          httpServletResponse.flushBuffer();
      
      }
      

      现在您可以获得布尔响应,并且可以在您的 javascript 代码中使用 response 作为布尔变量。

      【讨论】:

        【解决方案3】:

        尝试将produces 属性添加到您的@RequestMapping 所以

        @RequestMapping(value="/check.html",method=RequestMethod.POST, produces="application/json" )
        

        要了解您的问题,请阅读春季的content negotiation

        当框架对返回类型进行推理时,会考虑扩展您的请求check.html,并提示响应应为html。注释 @ResponseBody 尝试将内容添加到响应的正文。

        当您返回原始 true 时,框架会尝试找到一个转换器,该转换器会将 true 值转换为 HTML。它失败了,您会收到错误消息。

        将产品设置为application/json,它将使用底层转换器(如果您没有更改默认值,则为杰克逊),并且它将毫无问题地转换

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-18
          • 2012-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多