这个是看接收的接口怎么处理吧,
教学上的例子,有几处要调优的,可以参考:
1、例子里的error.html是放在templates目录下的,其实放在那个下不要紧,主要是Controller代码中的相对路径要调整下
2、异常发生时,没有达到预期效果,debug模式下,没有进到异常处理接口中。
①在自定义异常处理ExceptionHandler类,注解@ControllerAdvice(basePackages="包名")
或者在
②在主函数上@SpringBootApplication(scanBasePackages="包名")
通过以上方式,试试,看看能不能达到预期效果。
try{ 出现空指针的代码。。。 }catch(NullPointerException e){ 处理逻辑。。。 }
除了通用的Error构造函数外,JavaScript还有7个其他类型的错误构造函数。
InternalError: 创建一个代表Javascript引擎内部错误的异常抛出的实例。 如: "递归太多"。非ECMAScript标准。
RangeError: 数值变量或参数超出其有效范围。例子:var a = new Array(-1);
EvalError: 与eval()相关的错误。eval()本身没有正确执行。
ReferenceError: 引用错误。 例子:console.log(b);
SyntaxError: 语法错误。例子:var a = ;
TypeError: 变量或参数不属于有效范围。例子:[1,2].split('.')
URIError: 给 encodeURI或 decodeURl()传递的参数无效。例子:decodeURI('%2')
当JavaScript运行过程中出错时,会抛出上8种(上述7种加上通用错误类型)错误中的其中一种错误。错误类型可以通过error.name拿到。
你也可以基于Error构造自己的错误类型,这里就不展开了。
老师的Git仓库里有, 传送门--https://github.com/leechenxiang/imooc-springboot-starter/blame/master/src/main/resources/application.properties
解决了,出现重名方法。重命名即可
你在resources下使用templates可是不用设置prefix,会使用默认配置,就默认在resources的templates目录,,
如果 不用默认的,可以参考我现在用的配置
spring.thymeleaf.prefix=/WEB-INF/view/
spring.thymeleaf.suffix=.html
@ControllerAdvice 看看这个的注释是否去掉?
ExceptionHandler内的两个异常捕捉的方法,捕捉的是同一个异常,导致出现Exception的异常时,springBoot不知道应该被那个方法捕捉,所以启动项目的时候,他会对你的handler进行一个检测,检测到这里无法判断,从而出现启动失败的问题。
根据之前的问答,我注释之后就能显示这个界面
没注释的时候控制台报错是这样的:
java.lang.ArithmeticException: / by zero
at com.imooc.controller.ErrorController.error(ErrorController.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
2019-04-25 08:53:41.854 WARN 8568 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.ArithmeticException: / by zero]
我感觉吧,你说的这两个error不是一个作用。我认为thymeleaf/error是不报异常的情况下进入的页面,而templates/error是错误的时候进入的页面。至于thymeleaf/error为不报异常的情况下进入的页面,为什么还取名叫error呢?因为老师喜欢!
你可以试试,把Controller类中的int 1/0;这句话注释,然后重新运行一下,就会进那个不是错误的error页面了。
public static final String IMOOC_ERROR_VIEW = "thymeleaf/error";
1 确保 自己错误 页面 没有出错 要是出错的话 是不会 现实的
2 在启动注解里面 加入自动 扫描的包 @SpringBootApplication(scanBasePackages={"cn.nx"})
3 如果用modelandview 返回页面 必须自已在方法里面 new 不能写在 方法框号里面
IMoocExceptionHandler 异常捕获类上是否添加注解 @ControllerAdvice
这取决于你们的架构,如果时前后端分离的话,后台只要提供RESTfull API 即可,错误提示也是json,不能存在页面的
发生异常了,不再是control层里的路径了。进入的是
mav.setViewName(IMOOC_ERROR_VIEW);
这个视图
thymeleaf的依赖,把指定版本那一行去掉试试,全局的版本在<parent>里面已经指定过了
已经解决了,,,谢谢各位!
public static final String MY_ERROR_VIEW = "error/error";
忘了,发生异常了,不再走从control层里的路径了
问题已解决。在controller上添加@Requestmapping("err")就可以了。这时候只有进入err才会加载,而不会在一开始启动时候就直接执行
还没有连接数据库了,就是简单的抛出异常
我也刚在看,还不会
@Controller("Test")
public class Test{
@RequestMapping("/")
public ModelAndView one(){`这里写代码片`
ModelAndView mav = new ModelAndView("index");
mav.addObject("name","aaa");
mav.addObject("sex","男");
return mav; //跳转到某一路径下的index.jsp页面
}
@RequestMapping("/")
public String two(Model model){
model.addAttribute("name","aaa");
model.addAttribure("sex", "男");
return "index"; ///跳转到某一路径下的index.jsp页面
}
}
ModelAndView可以说是视图和模型的结合体,看上面代码区别很明显了
在pom中直接引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional></dependency>
设置以下两项(第一项如已设置直接设置第二项)
1) “File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,选中打勾 “Build project automatically” 。
2) 组合键:“Shift+Ctrl+Alt+/” ,选择 “Registry” ,选中打勾 “compiler.automake.allow.when.app.running” 。
之后直接正常run即可!
进不去这个类什么意思?你看一下你重写的异常处理有没有问题,或者检查一下,你抛出的异常,这个异常处理能不能接的住