I am new to spring. I am developing a REST api with spring webmvc. For error handling, I got this link http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-rest-spring-mvc-exceptions
I am trying to use a ResponseEntityExceptionHandler in my project. but whenever my controller throws an exception, it never gets to that ResponseEntityExceptionHandler.
Below is a snippet of code
controller
@Controller @RequestMapping("/hello") public class HelloController { private static final Logger logger = Logger.getLogger(HelloController.class); @RequestMapping(value="/{name}", method=RequestMethod.GET) public @ResponseBody String greet(@PathVariable(value = "name")String name ) throws InvalidInputException, ResourceNotFoundException{ logger.info("start greet() "+name ); System.out.println("start greet() "+name); String message = null; if("".equalsIgnoreCase(name)) { throw new InvalidInputException("Invalid Input"); } List<String> names = new ArrayList<String>(); names.add("Harshal"); names.add("Smitesh"); if(names.contains(name)){ message = "Hello "+ name; }else{ throw new ResourceNotFoundException("Requested Resource not found"); } System.out.println("end greet"); logger.info("end greet()"); return message; } }
Exceptions
package com.practice.errorhandlerdemo.exception; public class InvalidInputException extends RuntimeException{ private static final long serialVersionUID = 5489516240608806490L; public InvalidInputException() { super("Invalid Input"); } public InvalidInputException(String message) { super(message); } } package com.practice.errorhandlerdemo.exception; public class ResourceNotFoundException extends RuntimeException { private static final long serialVersionUID = -4041009155673754859L; public ResourceNotFoundException() { super("requested resource not found"); } public ResourceNotFoundException(String message) { super(message); } }
ExceptionHandler
@ControllerAdvice public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { private static final Logger logger = Logger.getLogger(RestResponseEntityExceptionHandler.class); @ExceptionHandler(value={ResourceNotFoundException.class}) @ResponseStatus(value=HttpStatus.NOT_FOUND) protected ResponseEntity<Object> handleResourceNotFound(RuntimeException ex, WebRequest request){ logger.info("start handleResourceNotFound()"); String bodyOfResponse = "Requested resource does not found"; HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); return handleExceptionInternal(ex, bodyOfResponse, httpHeaders, HttpStatus.NOT_FOUND, request); } @ExceptionHandler(value={InvalidInputException.class}) @ResponseStatus(value=HttpStatus.BAD_REQUEST) protected ResponseEntity<Object> handleInvalidInput(RuntimeException ex, WebRequest request){ logger.info("start handleInvalidInput()"); String bodyOfResponse = "Invalid Input"; HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); return handleExceptionInternal(ex, bodyOfResponse, httpHeaders, HttpStatus.BAD_REQUEST, request); } }
dispatch servlet
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package="com.practice.errorhandlerdemo.controller"/> <context:annotation-config/> </beans>
web.xml
<web-app> <display-name>ErrorHandlerDemo</display-name> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/my-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
spring-mvc spring-security error-handling spring-3
Harshal
source share