package ee.esutoniagodesu.web.rest;
import org.apache.catalina.connector.ClientAbortException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice(annotations = RestController.class)
public class CustomControllerAdvice extends ResponseEntityExceptionHandler {
private static final Logger log = LoggerFactory.getLogger(CustomControllerAdvice.class);
@ExceptionHandler
public ResponseEntity<GenericMessage<String>> bad_request(Exception e) {
log.error("bad_request {}", e.getMessage(), e);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messageOf(new RuntimeException("Serveri viga.")));
}
@ExceptionHandler({AccessDeniedException.class})
public ResponseEntity<GenericMessage<String>> forbidden(Exception e) {
log.error("forbidden {}", e.getMessage());
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(messageOf(e));
}
@ExceptionHandler({ClientAbortException.class})
public ResponseEntity<GenericMessage<String>> connection_reset_by_peer(Exception e) {
log.error("connection_reset_by_peer {}", e.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(messageOf(new RuntimeException(e.getMessage())));
}
@ExceptionHandler({IllegalStateException.class})
public ResponseEntity<GenericMessage<String>> internal_server_error(Exception e) {
log.error("internal_server_error {}", e.getMessage());
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(messageOf(e));
}
private static GenericMessage<String> messageOf(Exception e) {
String message = e.getMessage() != null ? e.getMessage() : "null";
return new GenericMessage<>(message);
}
}