2013-03-21 143 views
3

我想建立一个页面没有找到抓在我的春节WebMVCConfig位其没有工作..Spring JavaConfig不捕获PageNotFound?

这里是我的配置:

@Configuration 
@EnableWebMvc 
@PropertySource("classpath:application.properties") 
@Import(DatabaseConfig.class) 
@ImportResource("/WEB-INF/spring/applicationContext.xml") 
public class WebMVCConfig extends WebMvcConfigurerAdapter { 

    private static final String MESSAGE_SOURCE = "/WEB-INF/classes/messages"; 
    private static final Logger logger = LoggerFactory.getLogger(WebMVCConfig.class); 

    @Autowired 
    Environment env; 

    @Bean 
    public ViewResolver resolver() { 
     UrlBasedViewResolver url = new UrlBasedViewResolver(); 
     url.setPrefix("/WEB-INF/view/"); 
     url.setViewClass(JstlView.class); 
     url.setSuffix(".jsp"); 
     return url; 
    } 

    @Bean(name = "messageSource") 
    public MessageSource configureMessageSource() { 
     logger.debug("setting up message source"); 
     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
     messageSource.setBasename(MESSAGE_SOURCE); 
     messageSource.setCacheSeconds(5); 
     messageSource.setDefaultEncoding("UTF-8"); 
     return messageSource; 
    } 

    @Bean 
    public LocaleResolver localeResolver() { 
     SessionLocaleResolver lr = new SessionLocaleResolver(); 
     lr.setDefaultLocale(Locale.ENGLISH); 
     return lr; 
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     logger.debug("setting up resource handlers"); 
     registry.addResourceHandler("/resources/").addResourceLocations("/resources/**"); 
    } 

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     logger.debug("configureDefaultServletHandling"); 
     configurer.enable(); 
    } 

    @Override 
    public void addInterceptors(final InterceptorRegistry registry) { 
     registry.addInterceptor(new LocaleChangeInterceptor()); 
    } 


    public @Bean HandlerExceptionResolver exceptionResolver() { 
     Properties mappings = new Properties(); 
     mappings.put("org.springframework.web.servlet.PageNotFound", "404"); 
     mappings.put(DataAccessException.class.getName(), "dataAccessFailure"); 
     mappings.put(TransactionException.class.getName(), "dataAccessFailure"); 

     SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver(); 
     resolver.setExceptionMappings(mappings); 

     return resolver; 
    } 


    @Bean 
    public DefaultAnnotationHandlerMapping mapping() { 
     DefaultAnnotationHandlerMapping m = new DefaultAnnotationHandlerMapping(); 
     m.setDetectHandlersInAncestorContexts(true); 
     return m; 
    } 
} 

现在如果我把在未映射我一个网址会认为它会转到我的404.jsp页面?

+0

我不知道,是吗? – 2013-03-21 15:14:18

回答

0

配置自定义错误页面(404或任何其他错误代码)的方式是在web.xml ...

<error-page> 
    <error-code>404</error-code> 
    <location>/my-custom-page-not-found.html</location> 
</error-page> 

URL可以是静态页面,定制JSP甚至一个Spring控制器。

+3

我不能在JavaConfig中做到这一点? – SJS 2013-03-21 15:43:13

+1

看起来像有一张票可以打开,但它尚未完成。 https://java.net/jira/browse/SERVLET_SPEC-50 – leojh 2013-12-19 04:28:36

0

您可以使用@ExceptionHandler注释方法或@ControllerAdvice类。

在论坛的this post中描述了几种方法。

或者,您也可以参考Spring Docs - Handling exceptions部分。

+0

我尝试了他们两个,并且是不对的。它不在AS7中工作 – SJS 2013-03-22 13:06:00

相关问题