Exception handling with spring

0

I try to capture the 404 error of my application with Spring mvc and then send it to a view. But I do not know what error I can have the code that does not catch the error. I leave my code in case someone could help me and see where the fault is or what I need to put.

On the WebInitializer.java page, I have this:

/**
 * Clase de inicializacion de la aplicacion web
 */
public class WebAppInitializer extends AbstractWebApplicationInitializer {

private static final Logger LOGGER = AppLoggerFactory.getLogger(WebAppInitializer.class);

/**
 * Contructor de una instancia de inicializacion web, 
 * incluimos el logger de arranque
 */
public WebAppInitializer() {
    LOGGER.info("Starting.... {}", this.getClass().getName());
}

@Override
protected Class<?>[] preRootContextClassConfiguration() {
    return new Class[] {
            WebservicesConfiguration.class,
            ServiceConfiguration.class
    };
}

@Override
protected Class<?>[] preServletConfigClasses() {
    return new Class[] { WebMvcConfiguration.class };
}

@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
    boolean done = registration.setInitParameter("throwExceptionIfNoHandlerFound", "true"); // -> true
    if(!done) throw new RuntimeException();

}

}

On the WebMvcConfiguration.java page:

/**
 * Clase que configura Spring MVC en la aplicacion
 * <p/>
 * TODO: Hay que anadir para escanear los paquetes que necesite la 
 aplicacion
 **/
@Configuration
@EnableWebMvc
@ComponentScan({"com.isb.preferencias.*.web"})
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

  @Value("${static.version}")
  private String version;

  @Value("${static.cache}")
  private Integer cache;

  /**
   * Configura el gestor de recursos para que mapee las peticiones a las 
  rutas "/static/**" a los
   * ficheros ubicados bajo la carpeta "static" en el classpath.
   */
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
registry.addResourceHandler("/static/**").addResourceLocations("classpath:static/")
    .setCacheControl(CacheControl.maxAge(cache, TimeUnit.DAYS)).resourceChain(false)
    .addResolver(new VersionResourceResolver().addFixedVersionStrategy(version, "/**"));
}

/**
 * Configura el gestor de mapeos
 *
 * @return el RequestMappingHandlerMapping configurado para hacer 
correspondencia exacta
 */
public void configurePathMatch(PathMatchConfigurer configurer) {
  configurer.setUseSuffixPatternMatch(false);
  configurer.setUseTrailingSlashMatch(false);
}

/**
 * Configura el messages Resource
 * 
 * @return una instancia del gestor de mensajes de la aplicacion. TODO: 
 quitar este metodo si no
 *         se va a usar un MessageSource
 */
@Bean(name = "messageSource")
public MessageSource configureMessageSource() {
  SerializableResourceBundleMessageSource messageSource =
      new SerializableResourceBundleMessageSource();
  messageSource.setBasename("classpath:messages");
  return messageSource;
}

 /**
  * Locale Resolver
  * 
  * @return
  */
 @Bean
 public LocaleResolver localeResolver() {
   SessionLocaleResolver localeResolver = new SessionLocaleResolver();
   localeResolver.setDefaultLocale(new Locale("es", "ES"));
   return localeResolver;
  }
}

And in the ErrorController.java:

/**
 * Controller que trata lo endpoints a los que la arquitectura redirige cuando
 * se han producido errores no controlados.
 */
@Controller
public class ErrorController {

/**
 * Trata los errores no controlados de peticiones que no esperaban
 * respuestas json ni xml.
 * 
 * @param request
 *            objeto {@link HttpServletRequest} de la peticion que contiene
 *            un atributo "exception" con la excepcion causante del error.
 * @param model
 *            objeto {@link Model} para rellenar la respuesta.
 * @return nombre de la vista/plantilla que renderiza el mensaje de error.
 */
@RequestMapping(value = "/error/error/default")
public String handleExceptionDefault(HttpServletRequest request, Model model) {
    // TODO: realizar el tratamiento deseado (normalmente devolver un
    // mensaje de error generico)
    return null;
}

/**
 * Trata los errores no controlados de peticiones que esperaban respuestas
 * json.
 * 
 * @param request
 *            objeto {@link HttpServletRequest} de la peticion que contiene
 *            un atributo "exception" con la excepcion causante del error.
 * @return objeto de respuesta con el mensaje de error.
 */
@RequestMapping(value = "/error/json")
@ResponseBody
public ResponseEntity<String> handleExceptionJson(HttpServletRequest request) {
     return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}

/**
 * Trata los errores no controlados de peticiones que esperaban respuestas
 * xml.
 * 
 * @param request
 *            objeto {@link HttpServletRequest} de la peticion que contiene
 *            un atributo "exception" con la excepcion causante del error.
 * @return objeto de respuesta con el mensaje de error.
 */
@RequestMapping(value = "/error/xml")
@ResponseBody
public Object handleExceptionXml(HttpServletRequest request) {
    // TODO: realizar el tratamiento deseado (normalmente devolver un xml de
    // error generico)
    return null;
}

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="")
@ExceptionHandler(Exception.class)
public Object KeywordNotFoundException(Model m){
    m.addAttribute("error");
    return (m);
}

}
    
asked by MMS 26.04.2018 в 09:50
source

0 answers