как проверить параметры заголовка, используя Bean Validation и jax-rs - PullRequest
0 голосов
/ 21 октября 2018

У меня есть ресурсы jax-rs и у каждого одинаковый заголовок.Каков наилучший способ проверить, что заголовок присутствует с помощью Bean Validation.Я знаю о @HeaderParam, но я не хочу менять все мои методы во всех ресурсах, чтобы включить параметр заголовка.

1 Ответ

0 голосов
/ 13 января 2019

Это так же просто, как реализовать javax.ws.rs.container.ContainerRequestFilter.Например:

@Provider
public class ContentTypeValidatorFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext reqContext) {
        String contentType = getHeader(reqContext, "Content-Type");
        // Content-type validation, but you can valid as many headers as you want.
        if (Objects.isNull(contentType)) {
            throw new InvalidRequestException("Content-Type header is missing");
        }
    }

    private String getHeader(ContainerRequestContext requestContext, String header) {
        return requestContext.getHeaders().getFirst(header);
    }
}

Позже, чтобы обработать это исключение изящно, просто внедрите ExceptionMapper для этого InvalidRequestException.

Вышеупомянутый фильтр будет применен глобально.Но если вы хотите исключить некоторые конечные точки, тогда используйте @NameBinding, чтобы аннотировать свою пользовательскую аннотацию и применять ее только к определенным конечным точкам.

...