Это API, показанный фрагмент, который получается из классных JSON, данных, сохраненных на уровне базы данных.
@RestController
public class OwnerController extends RestExceptionHandler {
private final OwnerRepository ownerRepository;
public OwnerController(OwnerRepository ownerRepository) {
this.ownerRepository = ownerRepository;
}
@GetMapping()
public Iterable<Owner> getAllOwners() {
return ownerRepository.findAll();
}
@GetMapping("/{id}")
public Owner getOwner(@PathVariable Integer id) {
Owner owner = ownerRepository.findOwnerById(id);
if (owner == null) throw new EntityNotFoundException(id);
return owner;
}
@PostMapping()
@ResponseStatus(HttpStatus.CREATED)
public void addOwner(@RequestBody Owner body) {
ownerRepository.save(body);
}
}
Нет промежуточных слоев, я хотел бы как-то использовать это API, так что пользователь получает HTML просмотров. Я не хочу вносить изменения в этот конкретный класс, потому что тогда API будет непригодным для других клиентов. Я мог бы sh Я мог бы сделать это для Thymeleaf.
Пока вышло, что меня не удовлетворило:
public class OwnerController extends RestExceptionHandler {
private final OwnerRepository ownerRepository;
public OwnerController(OwnerRepository ownerRepository) {
this.ownerRepository = ownerRepository;
}
@GetMapping()
public ModelAndView getAllOwners() {
ModelAndView ownersListView = new ModelAndView("owners/owners_list");
ownersListView.addObject("owners", ownerRepository.findAll());
return ownersListView;
}
@GetMapping("/{id}")
public ModelAndView getOwner(@PathVariable Integer id) {
ModelAndView ownerView = new ModelAndView("owners/edit_owner_data");
Owner owner = ownerRepository.findOwnerById(id);
if (owner == null) throw new EntityNotFoundException(id);
ownerView.addObject("owner", owner);
return ownerView;
}
@PostMapping()
@ResponseStatus(HttpStatus.CREATED)
public ModelAndView addOwner(Owner body) {
ownerRepository.save(body);
ModelAndView ownerListView = new ModelAndView("owners/owners_list");
ownerListView.addObject("owners", repository.findAll());
return ownerListView;
}
}
Решение работает, конечно, но я должен изменить поведение контроллера по отношению к тому, что я хочу иметь в виду. Я думал, что прикладные уровни могут быть независимыми.
В настоящее время я рассматриваю возможность создания еще одного слоя, который использует API и интегрирует его в представление. На Inte rnet написано много вещей, но я ничего не нашел об архитектуре REST-приложения с представлением.