【问题标题】:Need to return Boolean @ResponseBody. Now getting HTTP 406 error需要返回布尔值@ResponseBody。现在收到 HTTP 406 错误
【发布时间】:2013-08-06 21:46:08
【问题描述】:

我正在尝试在 Web 应用程序(REST、Spring、JPA Hibernate)中将布尔值作为 HTTP 响应返回。代码如下:

@ResponseBody
@RequestMapping(value="/movieTheater", method=RequestMethod.GET)
public boolean getCustomerInput(Map<String, Double> input) {
    return transactionService.addTransaction(input);
}

现在,我想这不允许我返回一个布尔值,而是期待别的东西。当我尝试在浏览器中访问以下内容时:

http://localhost:8081/SpringMVCMerchant/movieTheater.htm

我收到以下错误:

HTTP Status 406 -

type Status report

message

description The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.

您能告诉我一种发送布尔值作为响应的方法吗?如果没有,我还能做什么? 提前致谢!

【问题讨论】:

    标签: hibernate http rest spring-mvc tomcat7


    【解决方案1】:

    第 1 步:创建一个枚举

    public enum ResponseStatus {
        SUCCESS("true"),
        FAILED("false");
        private final String status;
    
        private ResponseStatus(String status) {
           this.status = status;
        }
    
        public String getStatus() {
           return status;
        }
    }
    

    第 2 步:创建一个用于返回响应详细信息的类

    public class ResponseText {
        private String message;
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    } 
    

    第三步:修改代码如下

    @ResponseBody
    @RequestMapping(value="/movieTheater", method=RequestMethod.GET)
    public ResponseText getCustomerInput(Map<String, Double> input) {
        ResponseText result = new ResponseText();
        if(transactionService.addTransaction(input))
            result.setMessage(ResponseStatus.SUCCESS.getStatus());
        else
            result.setMessage(ResponseStatus.FAILED.getStatus());
        return result;
    }
    

    现在你可以像这样得到输出 JSON

    {[
        message:"true"
    ]}
    

    【讨论】:

    • 非常感谢您的回复!我尝试了上述步骤,但仍然遇到相同的 406 错误。我所做的是,我在客户端代码和服务器代码中都添加了 step1 和 step2。所以,现在在客户端我有代码: ResponseText rresult = restTemplate.getForObject("localhost:8081/SpringMVCMerchant/movieTheater.htm", ResponseText.class, variable);但是我收到了 406 错误,因此 rresult.getMessage() 为空。你能告诉我是否在这里遗漏了什么,或者我误解了你的步骤吗?谢谢!
    【解决方案2】:

    在生成 JSON 数据时似乎有问题,添加属性生成像这样

    @RequestMapping(value="/movieTheater", method=RequestMethod.GET,
                produces={MediaType.APPLICATION_JSON_VALUE})
    public @ResponseBody ResponseText getCustomerInput(Map<String, Double> input) {
        //TODO:
    }   
    

    【讨论】:

    • 感谢您的回复。我添加了“产品”,但并没有解决问题。事实上,当我添加“produces”时,服务器端的方法也没有被访问,这在以前发生过。有什么想法吗?
    • 它应该可以工作。否则,您的 spring servlet.xml 配置或 spring webflow 中存在一些问题。请检查 spring servlet.xml 是否添加了
    • 你说的是applicationContext.xml文件吗?
    【解决方案3】:

    将您的 spring 版本更新为 3.1.3.release 或更高版本。然后@Responsebody 将正确地将布尔值转换为 JSON。

    【讨论】:

      猜你喜欢
      • 2014-12-12
      • 2014-04-11
      • 2014-06-16
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多