Spring控制器是否可以使用同一个端点生成多个内容类型的组合



我需要使用相同的端点(zip、pdf、xml(为多种文件类型提供服务。

我需要为这些端点添加错误处理,以便在出现错误时,它们应该返回json(使用控制器建议(来向用户指示问题。例如:

@GetMapping(value = "api/books", produces = {applicaton/zip, application/json}
public ResponseEntity<byte[]> getZipedBooks(){...}
@GetMapping(value = "api/books", produces = {applicaton/pdf, application/json}
public ResponseEntity<byte[]> getPdfBooks()(...}

在没有application/json的情况下,Spring能够区分这些端点,并基于accept头调用正确的端点。但当我添加json时,Spring现在抛出异常:org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation即使可以从CCD_ 3报头推断出应当调用getPdfBook。

有没有办法将spring配置为在同一个端点上使用多个内容类型,或者我需要为每个文件类型创建特殊的端点?

我会重新考虑这种方法。如果您想在出错时返回JSON,请使用异常处理

这样你就可以添加一些类似的东西

private class ErrorResponse {
String message;
public ErrorResponse(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
@ExceptionHandler(value = Exception.class)  
public ResponseEntity<ErrorResponse> handleException(Exception e) {
return new ResponseEntity<ErrorResponse>(new ErrorResponse(e.getMessage()), HttpStatus.BAD_REQUEST);
}

最新更新