Код: Выделить всё
@Entity
@Getter
@Setter
public class Device {
@Id
@org.springframework.data.annotation.Id
@UuidGenerator
private UUID id;
/**
* The hardware associated with the device.
*
* @see GenericHardwareData for more info
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "hardware")
private GenericHardwareData hardware;
/**
* The storage capacity of the device.
*/
private int storage;
/**
* The operating system of the device.
*/
@ManyToOne
@JoinColumn(name = "operation_system")
private OsDto operationSystem;
private String name;
}
Журнал браузера Chrome из внешнего приложения, написанный на angular
< em>Снимок экрана показывает прямой объект после http-запроса.
Вот следующий код контроллера, который обрабатывает запрос
Код: Выделить всё
@Slf4j
@RestController
@RequestMapping("/hardware")
public class HardwareController {
private final HardwareRepository hardwareRepository;
private final HardwareService hardwareService;
@Autowired
public HardwareController(HardwareRepository hardwareRepository, HardwareService hardwareService) {
this.hardwareRepository = hardwareRepository;
this.hardwareService = hardwareService;
}
@GetMapping
@Secured({"ADMIN", "VIEW"})
public ResponseEntity getHardware() {
return ResponseEntity.ok(this.hardwareRepository.findAll());
}
@GetMapping("/find")
@Secured({"ADMIN", "VIEW"})
public ResponseEntity getHardwareByQrCode(@RequestParam("qrcode") String qrCode) {
try {
int qr = Integer.parseInt(qrCode);
return ResponseEntity.of(this.hardwareRepository.findByQrCode(qr));
} catch (NumberFormatException e) {
return ResponseEntity.badRequest().body("{\"error\": \"qr code can't be parsed to integer\"}");
}
}
@GetMapping("/device")
@Secured({"ADMIN", "VIEW"})
public ResponseEntity getComputerByQrCode(@RequestParam("qrcode") String qrCode, @RequestParam("type") String rawHardwareType) {
try {
HardwareType hardwareType = HardwareType.valueOf(rawHardwareType);
switch (hardwareType) {`enter code here`
case COMPUTER -> {
return this.hardwareService.getComputerFromQrCode(qrCode);
}
case DOCKING_STATION -> {
return this.hardwareService.getDockingStationByQrCode(qrCode);
}
case MOBILE -> {
return this.hardwareService.getMobileFromQrCode(qrCode);
}
case MONITOR -> {
return this.hardwareService.getMonitorByQrCode(qrCode);
}
case PRINTER -> {
return this.hardwareService.getPrinterByQrCode(qrCode);
}
}
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body("{\"error\": \"hardware type couldn't be serialized\"}");
}
return ResponseEntity.notFound().build();
}
@GetMapping("/find/{type}")
@Secured({"ADMIN", "VIEW"})
public ResponseEntity getHardwareByType(@PathVariable String type) {
try {
return ResponseEntity.ok(this.hardwareRepository.findAllByHardwareType(HardwareType.valueOf(type.toUpperCase())));
} catch (IllegalArgumentException e) {
return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
}
}
}
- Я попробовал добавить FetchType#EAGER в аннотацию ManyToOne, но ничего не изменилось. Значение осталось нулевым.
- Я поискал в базе данных, чтобы узнать, действительно ли это значение равно нулю, но база данных имеет правильный ключ в поле Operation_system и операционную систему таблица имеет тот же ключ со значением
Подробнее здесь: https://stackoverflow.com/questions/793 ... table-as-i