【问题标题】:Spring Boot Rest Controller endpoint exception: HttpMediaTypeNotAcceptableExceptionSpring Boot Rest Controller 端点异常:HttpMediaTypeNotAcceptableException
【发布时间】:2021-09-30 05:58:21
【问题描述】:

我在未填写必填字段时遇到问题,日志中显示以下异常:

org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示

假设我有一个包含如下属性的对象 CodeRequest:

@NotBlank(message = "payloadFormatIndicator.required")
@Size(max = 2, message = "payloadFormatIndicator.size")
private String payloadFormatIndicator;

我的控制器有对象 CodeRequest 作为参数,如下所示:

@PostMapping(value = "/dummy", produces = MediaType.IMAGE_PNG_VALUE)
public ResponseEntity<BufferedImage> generateQRCode(@Valid @RequestBody CodeRequest paymentRequest) throws Exception {

    log.debug("generateQRCode with the following request {}", paymentRequest);

    return ResponseEntity.status(HttpStatus.OK).body(ipsPaymentService.generateQRCode(paymentRequest));
}

当我将必填字段 payloadFormatIndicator 留空时,我希望收到一条错误消息,指出我的回复中需要 payloadFormatIndicator.required

但是,我在日志中收到以下错误消息:

org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示

我的异常处理程序如下所示:

@Slf4j
@ControllerAdvice

public class RestControllerExceptionHandler extends ResponseEntityExceptionHandler {
    
    @Override
    public ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException exception, HttpHeaders headers,
                                                               HttpStatus status, WebRequest request) {
        log.error(exception.getMessage(), exception);
        ExceptionResponse exceptionResponse = new ExceptionResponse(HttpStatus.BAD_REQUEST,
            exception.getBindingResult().getAllErrors().get(0).getDefaultMessage());
    
        return new ResponseEntity<>(exceptionResponse, new HttpHeaders(), exceptionResponse.getHttpStatus());
    }

看起来是因为方法 generateQRCode 返回 ResponseEntity&lt;BufferedImage&gt; 导致这个问题,因为对于我控制器上的其他方法,异常处理工作正常。

我正在使用 swagger 测试其余的 API,内容类型如下图所示:

知道如何解决吗?

【问题讨论】:

  • 你是如何调用你的 API 的?从错误消息看来,您的 Accept 请求标头不包含任何受支持的媒体类型(例如 image/pngimage/* 在您的情况下)。
  • 嗨,我已经更新了帖子,我正在使用 swagger 来测试 api
  • 那不正确……最好让 Swagger 发送正确的Accept 标头……
  • 我很抱歉你是对的它不正确,如果错误json else png,是否可以在提交时识别媒体类型?

标签: java spring-boot spring-rest controller-advice


【解决方案1】:

问题是由于生产者媒体类型。响应只接受image/png,但出现错误时媒体类型为application/json

像这样改变你的代码,

@PostMapping(value = "/dummy", produces = "application/json, image/png")

【讨论】:

    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2020-10-29
    • 2019-05-10
    • 2018-10-05
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多