Лучший способ добавить пользовательское исключение для весеннего загрузочного кода - PullRequest
0 голосов
/ 21 сентября 2018

Как отобразить соответствующее сообщение об ошибке при возникновении какого-либо исключения.

Предположим, что во время методов GET, если данные не найдены, должно отображаться пользовательское сообщение об исключении.

Аналогично, если мыпытается удалить данные, которые недоступны.

Car.java

package com.car_rental_project.car_project;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity

public class Car {

    @Id
    private String id;
    private String modelname;
    private String type;
    private String year_of_registration;
    private String seating_capacity;
    private String cost_per_day;
    private String milleage;
    private String pincode;
    private String contact_number;
    private String email;

    public Car() {

    }

    public Car(String id, String modelname, String type, String year_of_registration, String seating_capacity,String cost_per_day, String milleage, String pincode, String contact_number, String email) {
        super();
        this.id = id;
        this.modelname = modelname;
        this.type = type;
        this.year_of_registration = year_of_registration;
        this.seating_capacity = seating_capacity;
        this.cost_per_day = cost_per_day;
        this.milleage = milleage;
        this.pincode = pincode;
        this.contact_number = contact_number;
        this.email = email;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getModelname() {
        return modelname;
    }

    public void setModelname(String modelname) {
        this.modelname = modelname;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getYear_of_registration() {
        return year_of_registration;
    }

    public void setYear_of_registration(String year_of_registration) {
        this.year_of_registration = year_of_registration;
    }

    public String getSeating_capacity() {
        return seating_capacity;
    }

    public void setSeating_capacity(String seating_capacity) {
        this.seating_capacity = seating_capacity;
    }

    public String getCost_per_day() {
        return cost_per_day;
    }

    public void setCost_per_day(String cost_per_day) {
        this.cost_per_day = cost_per_day;
    }

    public String getMilleage() {
        return milleage;
    }

    public void setMilleage(String milleage) {
        this.milleage = milleage;
    }

    public String getPincode() {
        return pincode;
    }

    public void setPincode(String pincode) {
        this.pincode = pincode;
    }

    public String getContact_number() {
        return contact_number;
    }

    public void setContact_number(String contact_number) {
        this.contact_number = contact_number;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

CarService.java

package com.car_rental_project.car_project;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CarService {

    @Autowired
    private CarRepository CarRepository;

    public List<Car> getAllCars() {
        return (List<Car>) CarRepository.findAll();
    }

    public Car getCar(String id) {
        return (Car) CarRepository.findOne(id);

    }

    public void addCar(Car car) {
        this.CarRepository.save(car);
    }

    public void updateCar(String id, Car car) {
        this.CarRepository.save(car);
    }

    public void deleteCar(String id) {
        this.CarRepository.delete(id);;
    }
}

CarController.java

package com.car_rental_project.car_project;

import java.util.List;    
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CarController {

    @Autowired
    private CarService carService;

    @RequestMapping("/car")
    public List<Car> getAllCars() {
        return carService.getAllCars();
    }

    @RequestMapping("/car/{id}")
    public Car getCar(@PathVariable String id) {
        return carService.getCar(id);
            }

    //@PostMapping("/car")
    @RequestMapping(method=RequestMethod.POST, value="/car")
    public String addCar(@RequestBody Car car) {
        carService.addCar(car);
        String response = "{\"success\": true, \"message\": Car has been added successfully.}";
        return response;
    }

    //@RequestMapping(method=RequestMethod.PUT, value="/car/{id}")
    @PutMapping("/car/{id}")
    public String updateCar(@RequestBody Car car, @PathVariable String id) {
        carService.updateCar(id, car);
        String response = "{\"success\": true, \"message\": Car has been updated successfully.}";
        return response;
    }

    //@RequestMapping(method=RequestMethod.DELETE, value="/topics/{id}")
    @DeleteMapping("/car/{id}")
    public String deleteCar(@PathVariable String id) {
        carService.deleteCar(id);
        String response = "{\"success\": true, \"message\": Car has been deleted successfully.}";
        return response;
    }
}

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Вот некоторые из подходов, которые вы можете использовать для обработки пользовательских исключений.

Создайте POJO для обработки пользовательских сообщений об ошибках и укажите свойства, которые вы хотите вернуть.

public class ErrorResponse {
     private String message;

     public String getMessage() {
       return message;
    }

    public void setMessage(String message) {
      this.message = message;
    }
}

Подход 1. Внутри вашего метода Controller.

    @RequestMapping("/car/{id}")
    public ResponseEntity<?> getCar(@PathVariable String id) {
        Car car = carService.getCar(id);
        if (car == null) {
          ErrorResponse errorResponse = new ErrorResponse();
          errorResponse.setMessage("Record not found");
          return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND)
         }
       return new ResponseEntity<>(car, HttpStatus.OK); 
    }    

Подход 2: Обрабатывать исключения глобально.

Шаг 1: Создать класс исключений NotFound ирасширить до RunTime Exception.

public class NoRecordFoundException extends RuntimeException {

    public NoRecordFoundException() {
        super();
    }
}

Шаг 2: Создать обработчик Global Exception

@RestControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(NoRecordFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
@ResponseBody
public ErrorResponse handleNoRecordFoundException(NoRecordFoundException ex) 
{

    ErrorResponse errorResponse = new ErrorResponse();
    errorResponse.setMessage("No Record Found");
    return errorResponse;
}

// То же самое вы можете обработать Exceptionerror для внутреннего

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public ErrorResponse handleDefaultException(Exception ex) {
    ErrorResponse response = new ErrorResponse();
    response.setMessage(ex.getMessage());
    return response;
}
}

Шаг 3: throw исключение Не найдено из вашего контроллера или службы:

        @RequestMapping("/car/{id}")
        public ResponseEntity<?> getCar(@PathVariable String id) {
            Car car = carService.getCar(id);
            if (car == null) {
             throw new NoRecordFoundException();
             }
           return new ResponseEntity<>(car, HttpStatus.OK); 
        }    

Подход 3: Создать @ExceptionHandler в контроллере и выбросить

 @ExceptionHandler(NoRecordFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    @ResponseBody
    public ErrorResponse handleNoRecordFoundException(NoRecordFoundException ex) {

        ErrorResponse errorResponse = new ErrorResponse();
        errorResponse.setMessage("No Record Found");
        return errorResponse;
    }
0 голосов
/ 21 сентября 2018

Лучший способ обработки любых исключений, специфичных для приложения, - создать собственный класс исключений.Создайте пакет с именем com.randomorg.appname.exception.При этом создайте класс appexception, который расширяет класс Exception в Java.

    public class CustomAppException extends Exception {

    private String requestId;

    // Custom error message
    private String message;

    // Custom error code representing an error in system
    private String errorCode;

public CustomAppException (String message) {
        super(message);
        this.message = message;
    }

    public CustomAppException (String requestId, String message, String errorCode) {
        super(message);
        this.requestId = requestId;
        this.message = message;
        this.errorCode = errorCode;
    }

    public String getRequestId() {
        return this.requestId;
    }

    public void setRequestId(String requestId) {
        this.requestId = requestId;
    }

    @Override
    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getErrorCode() {
        return this.errorCode;
    }

    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
}

}

Как только это будет сделано, убедитесь, что ваш контроллер использует это исключение, так что вы можете настроить любое исключение, чтобы оно стало основанным на приложении.

В вашем случае ваши методы, такие как addCar, getCar, вы можете сказать, что он выбрасывает CustomAppException, а затем вы можете обработать его в простом блоке try catch.

Для дальнейшей импровизации вы можете дополнительно специализировать исключение, расширивКласс CustomAppException, скажем, MyCustomException, расширяет CustomAppException, так вы сможете лучше организовать обработку исключений.Дайте мне знать, если вам нужна дополнительная помощь по этому вопросу.Рад помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...