REST API + Thymelaf - архитектура веб-приложений - PullRequest
0 голосов
/ 18 марта 2020

Это 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-приложения с представлением.

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