gpt4 book ai didi

java - 处理 Jackson 在 Spring 端点上抛出的多个异常

转载 作者:行者123 更新时间:2023-12-01 11:32:11 24 4
gpt4 key购买 nike

在下面的代码中,我公开了一个 POST 端点。 POST 的返回值由 Success 对象上的 boolean 属性确定:

@RequestMapping(value="/new", method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String createDispatch(@RequestParam(value="p1") String p1) {

Success ds = new Success();
//Set a boolean on Success object to true
ObjectMapper mapper = new ObjectMapper();

try {
return mapper.writeValueAsString(ds);
} catch (JsonGenerationException e) {
e.printStackTrace();
return {"exception": "true"};
} catch (JsonMappingException e) {
e.printStackTrace();
return {"exception": "true"};
} catch (IOException e) {
e.printStackTrace();
return {"exception": "true"};
}

}

在写入转换为 JSON 时捕获每个异常类型 (return mapper.writeValueAsString(ds) ) 似乎是多余的,就好像创建 JSON 字符串存在问题一样(异常子句之一匹配)我无法将问题返回给客户端,因为我无法将异常包装在 Json 对象中。所以我只是返回 return {"exception": "true"};

为了封装应该抛出的异常类型,我应该返回什么?

最佳答案

您可以使用 @ExceptionHandler 处理 Spring Controller 中的异常并以 HTTP 响应状态代码或任何对象的形式返回状态,甚至以序列化为 JSON 的异常形式返回。

@RequestMapping(value="/new")
@ResponseBody
public String createDispatch(@RequestParam(value="p1") String p1) {
Success ds = new Success();
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(ds);
}

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public String handleAnyException(Exception exception) {
return formatExceptionAsJson(exception);
}

关于java - 处理 Jackson 在 Spring 端点上抛出的多个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com