在春季验证接受标头

时间:2018-07-17 05:59:56

标签: java spring api http-headers

如果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);
    }

....

1 个答案:

答案 0 :(得分:1)

您可以在@Getmapping内添加headers="Accept=application/json",这样您的方法将只处理该标头类型的调用。

然后,您可以添加一个方法,该方法处理您的特定AcceptHeader方法忽略的所有调用。这样,您只需要一种方法即可验证标题。

您还可以编写一个自定义验证器,并使用注释将其添加到您的方法中,如下所示: conditional validation