Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IE11兼容模式打破Spring白标错误页面_Java_Spring Mvc_Internet Explorer_Spring Boot - Fatal编程技术网

Java IE11兼容模式打破Spring白标错误页面

Java IE11兼容模式打破Spring白标错误页面,java,spring-mvc,internet-explorer,spring-boot,Java,Spring Mvc,Internet Explorer,Spring Boot,我对IE11和Spring Boot(1.3.3)有一个奇怪的问题。 当IE11的兼容模式被激活时,错误页面不会正确显示。相反,浏览器中会出现一个下载窗口 以下是如何重现错误: 弹簧工具套件: 创建一个新的“Spring Starter项目” 使用默认名称 使用依赖关系“Web” 完成 启动Spring引导应用程序 Internet Explorer 11: 单击“工具符号” “兼容性视图设置” 添加“本地主机” 接近 现在,当您打开“localhost:8080”时,浏览器不再显示Sp

我对IE11和Spring Boot(1.3.3)有一个奇怪的问题。 当IE11的兼容模式被激活时,错误页面不会正确显示。相反,浏览器中会出现一个下载窗口

以下是如何重现错误:

弹簧工具套件:

  • 创建一个新的“Spring Starter项目”
  • 使用默认名称
  • 使用依赖关系“Web”
  • 完成
  • 启动Spring引导应用程序
Internet Explorer 11:

  • 单击“工具符号”
  • “兼容性视图设置”
  • 添加“本地主机”
  • 接近
现在,当您打开“localhost:8080”时,浏览器不再显示Spring白标错误。它要求您从“localhost”下载“8080”。胡说八道:-(

我认为问题与此bug有关: 但在这里,用户至少会得到一个默认的IE404错误

不幸的是,我必须使用兼容模式,因为“在兼容视图中显示intranet站点”是我们公司的默认浏览器。。。 有人知道我如何解决这个问题吗


PS:我还尝试在一个自定义错误页面中设置
,但也没有帮助。

IE通过HTTP请求头字段发送一个不同的
接受:内容类型的列表,与Chrome不同。我无法重现您描述的奇怪下载行为,但使用不同的浏览器,我得到了不同的响应对同一个请求也使用onses

使用IE,我收到了
内容类型:application/json
响应 使用Chrome,它是一种
内容类型:text/html
响应

您必须告诉服务器应为您的白标错误页面生成什么内容类型。这可以通过覆盖Spring Boot的默认
ErrorController来实现,如下所示:

@Controller
public class YourCustomController implements ErrorController{

    private static final String PATH = "/error";

    @RequestMapping(value = PATH, produces={"text/html"})
    public String error() {
        return "error";
    }

    @Override
    public String getErrorPath() {
        return PATH;
    }
}
新的错误控制器可以生成
内容类型:text/html
,而不是错误的
内容类型
,这可能会迫使浏览器下载


取决于您使用的模板引擎(如果您使用的是MVC方法),注意配置参数。

中描述的内容类型。

IE通过HTTP请求头字段发送的
Accept:content-Types
值列表与Chrome不同。我无法重现您描述的奇怪下载行为,但使用不同的浏览器,我得到了不同的结果同样的请求也会得到响应

使用IE,我收到了
内容类型:application/json
响应 使用Chrome,它是一种
内容类型:text/html
响应

您必须告诉服务器应为您的白标错误页面生成什么内容类型。这可以通过覆盖Spring Boot的默认
ErrorController来实现,如下所示:

@Controller
public class YourCustomController implements ErrorController{

    private static final String PATH = "/error";

    @RequestMapping(value = PATH, produces={"text/html"})
    public String error() {
        return "error";
    }

    @Override
    public String getErrorPath() {
        return PATH;
    }
}
新的错误控制器可以生成
内容类型:text/html
,而不是错误的
内容类型
,这可能会迫使浏览器下载


根据您使用的模板引擎(如果您使用的是MVC方法),请注意配置参数
spring..content type
,如中所述。

谢谢。它或多或少可以工作;-)。不幸的是,有一个缺点:我将应用程序的一部分公开为REST-API。这里我确实想要一个错误,因为content-type-application/json=>这个默认行为不幸被上面的方法覆盖了。尽管如此,我还是会认为这个答案是可以接受的,因为它是解决最初问题的可行方法。很高兴在这里看到这个答案,但皮蒂说,它或多或少对你有用。要绕过缺点,您可以考虑从REST控制器中抛出一个
YourCustomException
,并让一个单独的
@ControllerAdvice
通过
@ExceptionHandler({YourCustomException.class})
注释处理您的自定义异常类型。ExceptionHandler方法随后可以使用YourCustomException的
@ResponseBody
进行回复,以JSON格式创建答案。如果您需要代码示例,请告诉我。谢谢。它或多或少起作用;-)。不幸的是,有一个缺点:我将应用程序的一部分公开为REST-API。这里我确实想要一个错误,因为content-type-application/json=>这个默认行为不幸被上面的方法覆盖了。尽管如此,我还是会认为这个答案是可以接受的,因为它是解决最初问题的可行方法。很高兴在这里看到这个答案,但皮蒂说,它或多或少对你有用。要绕过缺点,您可以考虑从REST控制器中抛出一个
YourCustomException
,并让一个单独的
@ControllerAdvice
通过
@ExceptionHandler({YourCustomException.class})
注释处理您的自定义异常类型。ExceptionHandler方法随后可以使用YourCustomException的
@ResponseBody
进行回复,以JSON格式创建答案。如果您需要代码示例,请告诉我。