我正在尝试使用Spring的HandlerInterceptorAdapter
处理为以下其余端点计划维护的应用程序:
因此,我通过扩展/api/authentication
创建了一个拦截器:
public class MigrationStateInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(someLogic) {
return true
}
response.reset();
response.sendError(HttpStatus.SERVICE_UNAVAILABLE.value());
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}
然后将其添加到我的HandlerInterceptorAdapter
中:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MigrationStateInterceptor()).addPathPatterns("/api/authentication");
}
问题是,我收到了InterceptorRegistry
,而不是在客户端收到503 (Service Unavailable)
错误
从代码片段中可以看出,我尝试重置响应,但没有结果。
我也尝试修改Failed to load resource: the server responded with a status of 406 (Not Acceptable)
和Accept
标头,但没有运气:
response.setContentType(MediaType.TEXT_PLAIN_VALUE);
response.addHeader("Accept", "text/plain");
知道为什么会发生这种情况以及如何避免这种情况吗?
注意:我在客户端使用Angular。从我看到的内容中,Content-Type
将内容类型设置为HttpServletResponse#sendError
,而cookie和其他标头保持不变。这可能是个问题吗?
编辑:
我什至尝试抛出异常而不是使用text/html
并单独处理该异常,但是最终结果是相同的。
例如。:
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (some logic) {
return true;
}
throw new MigrationStateException("Migration process is disabled");
}
@ExceptionHandler(MigrationStateException.class)
public ResponseEntity<String> migrationStateError(MigrationStateException e) {
return new ResponseEntity<>(e.getMessage(), HttpStatus.SERVICE_UNAVAILABLE);
}
java大神给出的解决方案
我认为问题是您正在映射到/api/authenticate
的请求不是预期的text/html
,或者是您发送了错误的请求类型(即GET
而不是POST
等)
您说过,鉴于给定与身份验证端点关联的默认默认值,angular正在发送text/html
,它可能期望使用application/x-www-form-urlencoded
数据。因此,Spring截取了尚未映射的Content-Type
和406'ing。
我看到有人在他们的Spring Boot应用程序中添加@EnableKafka,我想知道为什么。我有一个工作的春季靴kafka生产者和使用者,并且没有使用@EnableKafka。那么,为什么人们需要显式添加它?谢谢。 java大神给出的解决方案 这是因为Spring Boot通过KafkaAutoConfiguration类(javadoc)为Kafka提…
用Java封装对象? - javaprivate中的Java提供类级别的封装。可以封装一个对象吗?还是这样做徒劳?例如,如果我们将一个类定义为 public class Person { private String ssn; private ArrayList<Person> friends = new ArrayList<Person>(); public voi…
Tomcat找不到直接放置在classes文件夹下的类 - java我有以下JSP:<%@ page import="foo.*" %> <html> <body> The page count is: <%=Counter.getCount()%> </body> </html> 我在包Counter中有一个foo类,该类存储在: …
JTable所有列右对齐 - java有没有一种方法可以同时对齐jtable中的所有列?使用这个:DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer(); rightRenderer.setHorizontalAlignment( JLabel.RIGHT ); JTAB_TABLE.getColumnMod…
Java日期格式解析 - java我正在尝试通过JSON响应更改日期格式,但我一直在获取java.text.ParseException。这是来自服务器2015-02-03T08:37:38.000Z的日期,我希望它显示为2015/02/03这是yyyy-MM-dd。而我做到了。DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd…