Lol*_*lly 2 java spring-validator spring-boot
我正在使用 Spring Boot 2.3.8 创建休息服务。我需要验证请求标头,以便它应该具有某些标头,否则会引发错误。这对于所有方法或服务来说应该是通用的。我在下面尝试过,
public ResponseEntity<Object> addEmployee(
@RequestHeader(name = "header1", required = true) String header1,
@RequestHeader(name = "header2", required = true) String header2,
@RequestBody Employee employee)
throws Exception
{
Run Code Online (Sandbox Code Playgroud)
但我需要为所有控制器中的所有方法添加此内容。如果是这种情况,我如何为全局所有服务抛出“请求标头中缺少 Header1”/“请求标头中缺少 header2”之类的错误?
对于全局使用,您可以注册一个拦截器。
@Component
public class MyHandlerInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception arg3) throws Exception {
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
//here check headers contained in request object
if (request.getHeader("header1") == null || request.getHeader("header2") == null) {
response.getWriter().write("something");
response.setStatus(someErrorCode);
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
然后注册一下
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private MyHandlerInterceptor interceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor).addPathPatterns("/**");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22373 次 |
| 最近记录: |