gpt4 book ai didi

java - 在 ExceptionHandler 中确定可接受的内容类型

转载 作者:行者123 更新时间:2023-11-30 06:46:36 24 4
gpt4 key购买 nike

在 Spring 应用程序中,我有一个通常返回图像的端点 (produces = MediaType.IMAGE_PNG_VALUE)。

我还有 @ExceptionHandler 函数来处理各种功能。

我正在尝试从 @ExceptionHandler 中找到一种方法来确定客户端是否会接受 text/plaintext/json 所以如果出现错误,我可以返回其中一个,或者如果他们只需要 image/png 则忽略它。

我如何确定可以为给定请求返回哪些可接受的内容类型?

最佳答案

您可以访问请求以检查 header 并返回适当的响应。是标准Content Negotiation .

举个例子:

@ControllerAdvice
public class MyExceptionHandler extends ResponseEntityExceptionHandler {

@ExceptionHandler(value = {RuntimeException.class})
protected ResponseEntity<Object> handleMyException(RuntimeException ex, WebRequest request) {
List<String> acceptableMimeTypes = Arrays.asList(request.getHeaderValues(HttpHeaders.ACCEPT));
if (acceptableMimeTypes.contains(MediaType.TEXT_PLAIN_VALUE)) {
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN_VALUE)
.body("hello");
}
throw ex;
}
}

有一些参数 spring-mvc 可以自动注入(inject)到 controller 方法中,而 WebRequest (即 springhttp 请求的表示)就是其中之一。如果客户端随请求发送了一个 Accept : text/plain header ,如果出现 RuntimeException,则上面的示例返回字符串 hello。如果没有异常,这个逻辑根本不会被触发,所以端点将只返回它通常返回的任何内容。您可以阅读有关 @ControllerAdvice@ExceptionHandler 的更多信息 here .

当然,一定要考虑您要处理的确切异常类型,并返回语义上适当的状态代码,以便客户端知道如何正确解释响应。

关于java - 在 ExceptionHandler 中确定可接受的内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47441304/

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