Это так же просто, как реализовать 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
, чтобы аннотировать свою пользовательскую аннотацию и применять ее только к определенным конечным точкам.