package be.mentoringsystems.merke.presentation; import be.mentoringsystems.merke.model.FilterMap; import be.mentoringsystems.merke.model.SortingMap; import be.mentoringsystems.merke.model.dto.ApiDTO; import be.mentoringsystems.merke.presentation.conversion.FilterMapEditor; import be.mentoringsystems.merke.presentation.conversion.SortingMapEditor; import java.util.ArrayList; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.http.HttpStatus; import org.springframework.security.access.AccessDeniedException; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.WebRequest; /** * * @author anthonyarents */ @ControllerAdvice(annotations = RestController.class) public class Advice { private static final Logger LOGGER = LogManager.getLogger(Advice.class); @InitBinder("queryParams") public void initBinderForQueryParams(final WebDataBinder binder) { binder.registerCustomEditor(FilterMap.class, new FilterMapEditor()); binder.registerCustomEditor(SortingMap.class, new SortingMapEditor()); } @ExceptionHandler(value = AccessDeniedException.class) @ResponseStatus(HttpStatus.FORBIDDEN) @ResponseBody public ApiDTO accessDeniedException(final AccessDeniedException exception, final WebRequest request) { LOGGER.error(exception.getMessage()); final List messageList = new ArrayList(); messageList.add(exception.getMessage()); return ApiDTO.error(messageList); //return ApiDTO.error(Throwables.toStringList(exception)); } @ExceptionHandler(value = Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseBody public ApiDTO exception(final Exception exception, final WebRequest request) { final List messageList = new ArrayList(); if ("org.apache.catalina.connector.ClientAbortException".equals(exception.getClass().getCanonicalName())) { LOGGER.debug(exception.getMessage()); //LOGGER.info("ignored client abort"); return null; } else { LOGGER.error(exception.getMessage(), exception); messageList.add(exception.getMessage()); } return ApiDTO.error(messageList); } }