如果accept标头不是application / json,如何在spring中验证accept标头并返回自定义消息。目前,我正在这样做(下),但是我想知道是否还有另一种方法?
我知道我可以创建自定义异常并根据发生的错误引发异常,但是有其他方法吗?
@GetMapping(value = "/get", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public ResponseEntity<String> get(final HttpEntity<String> httpEntity) {
HttpHeaders responseHeaders = new HttpHeaders();
String acceptString = httpEntity.getHeaders().getFirst("Accept");
if (acceptString == null || acceptString.isEmpty()) {
return new ResponseEntity<String>("empty accept header", HttpStatus.BAD_REQUEST);
}
if ((MediaType.APPLICATION_JSON_VALUE).equalsIgnoreCase(acceptString)) {
responseHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
}
else {
return new ResponseEntity<String>("Not valid accept value", HttpStatus.BAD_REQUEST);
}
....
答案 0 :(得分:1)
您可以在@Getmapping
内添加headers="Accept=application/json"
,这样您的方法将只处理该标头类型的调用。
然后,您可以添加一个方法,该方法处理您的特定AcceptHeader方法忽略的所有调用。这样,您只需要一种方法即可验证标题。
您还可以编写一个自定义验证器,并使用注释将其添加到您的方法中,如下所示: conditional validation