我有jax-rs资源,每个资源都有相同的标头。使用Bean验证来验证标头是否存在的最佳方法是什么?我知道@HeaderParam,但是我不想更改所有资源中的所有方法以包括标头参数。
答案 0 :(得分:0)
这就像实现incidentID newcolumn1 newcolumn2 newcolumn3
<int> <fct> <fct> <fct>
1 1 A B NA
2 2 A NA NA
3 3 A B C
4 4 B C NA
一样简单。例如:
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
来注释自定义注释,并将其仅应用于特定端点。