使用Spring的HandlerInterceptor发送错误导致406(不可接受)响应 - java

我正在尝试使用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 Kafka中,我需要在应用程序中添加@EnableKafka批注吗? - java

我看到有人在他们的Spring Boot应用程序中添加@EnableKafka,我想知道为什么。我有一个工作的春季靴kafka生产者和使用者,并且没有使用@EnableKafka。那么,为什么人们需要显式添加它?谢谢。 java大神给出的解决方案 这是因为Spring Boot通过KafkaAutoConfiguration类(javadoc)为Kafka提…

用Java封装对象? - java

private中的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�…