当前位置: 首页 > 知识库问答 >
问题:

Spring mvc-为XML和JSON响应配置错误处理

平学
2023-03-14
@RequestMapping(value = "machine/xmlData", method = RequestMethod.GET, produces = "application/xml")
    public ResponseEntity<String> getXml(HttpServletRequest request)
            throws Exception {
        return getDataFromService();

}
 @ExceptionHandler(Exception.class)
        @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
        public ResponseEntity HandleException(Exception ex, HttpServletRequest request) {
            ex.printStackTrace();
           // here logic to generate Custom error Object
            return new ResponseEntity<Object>(customErrorObject, HttpStatus.INTERNAL_SERVER_ERROR);
        }

案例1:Accept:“application/xml”和来自服务的有效响应一切正常。

案例2:接受:“application/xml”和来自服务的异常,然后我得到406不可表示

根据我的理解是

因为HandleException中的ResponseEntity是JSON,accept头是“application/xml”,所以我得到了406。

我是否可以从HandleException方法以xml和json的形式发送错误响应?我知道在REST API方法上我们可以定义这样的东西produces={“application/json”,“application/xml”}我很难把它放在HandleException方法上。

任何小费都会有很大的帮助。

谢了。

共有1个答案

全彬
2023-03-14

您可以使用@ResponseBody注释(https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc)来利用spring-mvc HttpMessageConverters。此注释负责为给定的响应类型选择正确的messageConverter。

要使响应兼容xml或json,您需要执行以下操作:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class WrappedExceptionResponse {
    public String respone;

    public String getRespone() {
        return respone;
    }

    public void setRespone(String respone) {
        this.respone = respone;
    }
}

并将异常处理程序方法更改为

    @ExceptionHandler(Exception.class)
    @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
    public @ResponseBody WrappedExceptionResponse HandleException(Exception ex, HttpServletRequest request) {
//        ex.printStackTrace();
       // here logic to generate Custom error Object
        WrappedExceptionResponse resp=new WrappedExceptionResponse();
        resp.setRespone(ex.getMessage());
    return resp;
 类似资料:
  • 问题内容: 我看了其他几个问题,但我仍然不完全理解。我想将JSON字符串发布到远程地址,然后从JSON响应中检索值。我正在使用Java的Apache库。 作为主体,我将通过以下示例(): 我也完全不知道如何从响应中检索JSON值。 问题答案: 最简单的方法是使用类似google-http-java-client之类的库,但是如果您想自己解析JSON响应,则可以通过多种方式进行,您可以使用org.j

  • 问题内容: 我无法使用RestTemplate(org.springframework.web.client.RestTemplate)应对额外的弹簧行为,但没有成功。 我在代码下面的Hole应用程序中使用,并且始终会收到XML响应,该响应会解析并评估其结果。 但是无法确定为什么执行后服务器响应为JSON格式: 我已经在较低级别的RestTemplate上进行了调试,内容类型为XML,但是不知道为

  • 我正在使用Retrofit和Gson从REST服务获取数据。它运行完美,但仅当API不返回错误时。通常,API返回对象列表(作为json),但当发生错误时,API返回单个错误对象。我正在尝试获取

  • 本文向大家介绍springmvc处理响应数据的解析,包括了springmvc处理响应数据的解析的使用技巧和注意事项,需要的朋友参考一下 1. ModelAndView 相关的成员变量和方法 private Object view; 描述视图信息 private ModelMap model 描述模型数据(响应数据) public void setViewName(String viewName)

  • 我是亚马逊Lambda-API实现的初学者。 因此,我想看看这里有什么问题,所以我点击API本身,在方法执行中可以看到下面的内容是灰色的:“集成响应:代理集成不能配置为转换响应。” 我已经测试了许多不同的配置,但我仍然面临同样的错误。我不知道为什么这一步是灰色的。

  • 我正在从AWS API网关调用AWS Lambda函数。返回的JSON需要压缩,因为它有时会变得太大(身体大小太大等)。但是,我在通过API网关获取响应时遇到了一些问题。这是我的Java代码: 我已经检查了Base64输出,它似乎工作正常(粘贴了它)https://www.base64decode.org/). 此外,当我与Postman核对时,我得到一个二进制blob,如果我将响应保存为以.gz