Close

Spring MVC - SimpleMappingExceptionResolver Examples

Spring MVC 


SimpleMappingExceptionResolver is an implementation of HandlerExceptionResolver. It can be used to map exception classes to view names and view names to status codes.


package com.logicbig.example;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import java.util.Properties;

@EnableWebMvc
@ComponentScan("com.logicbig.example")
public class AppConfig {

@Bean
HandlerExceptionResolver errorHandler () {
SimpleMappingExceptionResolver s =
new SimpleMappingExceptionResolver();

//exception to view name mapping
Properties p = new Properties();
p.setProperty(NullPointerException.class.getName(), "npeView");
p.setProperty(OrderIdNotValidException.class.getName(),
"OrderIdNotValidView");
s.setExceptionMappings(p);

//mapping status code with view response.
s.addStatusCode("npeView", 404);

//setting default error view
s.setDefaultErrorView("defaultErrorView");
//setting default status code
s.setDefaultStatusCode(400);

return s;
}

@Bean
public ViewResolver viewResolver () {
InternalResourceViewResolver viewResolver =
new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
package com.logicbig.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ExampleController {

@Autowired
private DataService dataService;

@RequestMapping("/order/{orderId}")
public String handleRequest (@PathVariable("orderId") String orderId,
Model model) {
return dataService.getOrderDetail(orderId);
}

@RequestMapping("/data/{id}")
public String testHandler (@PathVariable("id") String id,
Model model) {
return dataService.getData(id);
}

@RequestMapping("/test")
public void testHandler2 () {
throw new RuntimeException("test exception");
}
}
Original Post




    @Bean
HandlerExceptionResolver customExceptionResolver () {
SimpleMappingExceptionResolver s = new SimpleMappingExceptionResolver();
Properties p = new Properties();
//mapping spring internal error NoHandlerFoundException to a view name.
p.setProperty(NoHandlerFoundException.class.getName(), "error-page");
s.setExceptionMappings(p);
//uncomment following line if we want to send code other than default 200
//s.addStatusCode("error-page", HttpStatus.NOT_FOUND.value());

//This resolver will be processed before default ones
s.setOrder(Ordered.HIGHEST_PRECEDENCE);
return s;
}




See Also