Java tutorial
/******************************************************************************* * Copyright 2017 nishant * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ package com.ns.retailmgr.controller.exception; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.context.request.WebRequest; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; @ControllerAdvice public class RestControllerExceptionHandler extends ResponseEntityExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(RestControllerExceptionHandler.class); @Override protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { List<FieldError> fieldErrors = ex.getBindingResult().getFieldErrors(); List<ObjectError> globalErrors = ex.getBindingResult().getGlobalErrors(); List<String> errors = new ArrayList<>(fieldErrors.size() + globalErrors.size()); String error; for (FieldError fieldError : fieldErrors) { error = fieldError.getField() + ", " + fieldError.getDefaultMessage(); errors.add(error); } for (ObjectError objectError : globalErrors) { error = objectError.getObjectName() + ", " + objectError.getDefaultMessage(); errors.add(error); } RestErrorMessage RestErrorMessage = new RestErrorMessage(errors); return new ResponseEntity(RestErrorMessage, headers, status); } @Override protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { String unsupported = "Unsupported content type: " + ex.getContentType(); String supported = "Supported content types: " + MediaType.toString(ex.getSupportedMediaTypes()); RestErrorMessage RestErrorMessage = new RestErrorMessage(unsupported, supported); return new ResponseEntity(RestErrorMessage, headers, status); } @Override protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { Throwable mostSpecificCause = ex.getMostSpecificCause(); RestErrorMessage RestErrorMessage; if (mostSpecificCause != null) { String exceptionName = mostSpecificCause.getClass().getName(); String message = mostSpecificCause.getMessage(); RestErrorMessage = new RestErrorMessage(exceptionName, message); } else { RestErrorMessage = new RestErrorMessage(ex.getMessage()); } return new ResponseEntity(RestErrorMessage, headers, status); } protected ResponseEntity<Object> handleRunTimeException(RuntimeException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { status = HttpStatus.INTERNAL_SERVER_ERROR; Throwable mostSpecificCause = ex.getCause(); RestErrorMessage RestErrorMessage; if (mostSpecificCause != null) { String exceptionName = mostSpecificCause.getClass().getName(); String message = mostSpecificCause.getMessage(); RestErrorMessage = new RestErrorMessage(exceptionName, message); } else { RestErrorMessage = new RestErrorMessage(ex.getMessage()); } return new ResponseEntity(RestErrorMessage, headers, status); } }