Я создал две простые службы RESTful ( аренда-сервис-управление, авто-управление-сервис ), в аренда-сервис Я вызываю GET
метод автосервис с помощью @FeignClient
, который возвращает экземпляр класса Car
. Этот класс Car
находится только в автосервисе . Поэтому, чтобы отобразить этот объект в rent-service @FeignClient
Метод прокси-интерфейса, я создал класс с именем CarProxy
, который имеет точно такие же поля и все, что и Car
класс. И это отображение отлично работает. Мой вопрос: как происходит это отображение, даже если классы два разных? @FeignClient
или Jackson
отображает это на основе имен полей класса? И нормально ли создавать прокси-классы для объектов @FeignClient
возвращаемых прокси-методов? Или лучше сделать @Controller
методы для возврата объектов в HashSet
или HashMap
вместо использования пользовательского класса, такого как Car
?
//Car class Only in Car-management-service
@Entity
@Table(name = "CAR")
public class Car {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "CAR_ID")
private Long carId;
@Column(name = "REG_NUM")
private String regNumber;
@Column(name = "BRAND")
private String brand;
@Column(name = "MODEL")
private String model;
//Getter,Setter,Constructor below
}
//Controller in car-management-service which returns Car object
@RestController
@RequestMapping("/car-service")
public class CarInfoController {
@Autowired
CarService service;
@GetMapping(path = "/getCarInfo/{Id}")
public Car getCarDetails(@PathVariable Long Id) {
if (Id == null)
throw new IllegalArgumentException("Id is Null");
return service.findCarById(Id);
}
}
//FeignClient interface in rent-management-service which calls car-service GET endpoint
@FeignClient(name = "car-management-service", url = "localhost:8100/car-service")
public interface CarManagementServiceProxy {
@GetMapping(path = "/getCarInfo/{Id}")
public CarProxy getCarDetails(@PathVariable("Id") Long Id);
}
//CarProxy class in rent-service which is a clone to Car class in car-service
public class CarProxy {
private Long carId;
private String regNumber;
private String brand;
private String model;
//Getter,Setter,Constructor below
}