【问题标题】:Returning JSON response from Spring Exception Handler从 Spring 异常处理程序返回 JSON 响应
【发布时间】:2016-05-24 18:32:15
【问题描述】:

我正在使用下面提到的 Spring 代码来处理异常并将响应返回给客户端。由于我在这里使用了 ResponseBody 注释,所以我期待 spring 在出现错误时返回 JSON 响应,但我看到在客户端收到以下响应(JSON 响应在 responseText 内,而不是直接返回到客户端)。请告知我如何将 JSON 响应返回给调用者-

在客户端收到响应:-

Object {readyState: 4, responseText: "{"status":false,"msg":"User Data not available","r…"MARSAPI003","noOfRecords":0,"responseList":null}", responseJSON: Object, status: 403, statusText: "Forbidden"}

Spring 代码:-

@ExceptionHandler(MarsUnAuthorizedOperation.class)
@ResponseBody
@ResponseStatus(value=HttpStatus.FORBIDDEN)
public MarsResponse unAuthorizedOperationExceptionHandler(final Exception ex){
    final MarsResponse response = new MarsResponse();
    response.setNoOfRecords(0);
    response.setMsg(ex.getMessage());
    response.setResponseCode(marsMessageProperties.getUnauthorizedOperationErrorCd());
    response.setResponseMessage(marsMessageProperties.getUnauthorizedOperationErrorMsg());
    response.setStatus(false);
    return response;
}

【问题讨论】:

  • 我认为它可能会干扰 @ResponseStatus(value=HttpStatus.FORBIDDEN) 注释(这会导致其他一些处理程序进一步处理它)。尝试删除它并确保该类本身使用@ControllerAdvice 进行注释。我想你在一年多过去了之后就不需要这个建议了,但我把它留在这里给那些迷路的人。
  • 尝试在类的顶部添加@Produces(MediaType.APPLICATION_JSON)。

标签: java json spring spring-mvc


【解决方案1】:

我认为是您的 @ResponseBody 注释阻止了 spring 将您的 MarsResponse 对象编组为 JSON 对象。尝试删除它并再次检查。

【讨论】:

    猜你喜欢
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2018-05-20
    • 2015-07-26
    • 2015-09-03
    • 2021-04-23
    • 2019-08-29
    相关资源
    最近更新 更多