【发布时间】: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<BufferedImage> 导致这个问题,因为对于我控制器上的其他方法,异常处理工作正常。
我正在使用 swagger 测试其余的 API,内容类型如下图所示:
知道如何解决吗?
【问题讨论】:
-
你是如何调用你的 API 的?从错误消息看来,您的
Accept请求标头不包含任何受支持的媒体类型(例如image/png或image/*在您的情况下)。 -
嗨,我已经更新了帖子,我正在使用 swagger 来测试 api
-
那不正确……最好让 Swagger 发送正确的
Accept标头…… -
我很抱歉你是对的它不正确,如果错误json else png,是否可以在提交时识别媒体类型?
标签: java spring-boot spring-rest controller-advice