Spring RESTFul и View для него

409
08 августа 2021, 21:40

У меня есть RESTful контроллер для приложения, позволяющее просматривать записи из БД по их id.

@RestController
@RequestMapping(value = "/logs")
public class AppAdminController {
    @Autowired
    RabbitListenerEndpointRegistry registry;
    @Autowired
    RestLogRepository restLogRepository;
    @Autowired
    RestLogRepositoryCustomImpl restLogRepositoryCustom;
    final ModelMapper modelMapper;
    public AppAdminController(ModelMapper modelMapper) {
        this.modelMapper = modelMapper;
    }

    @ApiOperation("Поиск body лога по его id")
    @GetMapping("/body/{id}")
    public String readBodyById(
        @PathVariable(value = "id", required = true) Long logId
    ) {
        return GzipUtils.unzip(restLogRepository.findByLogId(logId)
            .orElseThrow(() -> new NoSuchElementException("Element not found")).getBody());
    }
    @ApiOperation("Поиск лога по его id")
    @GetMapping("/{id}")
    public RestLogDto readById(
        @ApiParam("id лога")
        @PathVariable(value = "id", required = true) Long logId) {
        return DtoConverter.convert(
            restLogRepository.findByLogId(logId).orElseThrow(() -> new NoSuchElementException("Element not found")),
            modelMapper);
    }
}

Значения возвращаются в виде класса и, соответственно, преобразуются в JSON.

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)    
public class RestLogDto {
    Long id;
    Long responseId;
    String javaLogId;
    Date createdOn;
    Date responseCreatedOn;
    String status;
    String responseStatus;
    String message;
    String responseMessage;
    String responseDuration;
    String body;
}

Вопросы: Каким образом нужно реализовать View для этого приложения? Нужно ли писать еще один (уже MVC) контроллер? Насколько я понял, сама суть RestController в том, чтобы возвращать не View, а данные. Будет ли в таком случае само желание добавить сюда View ошибочным?

В интернете супер-много информации и статей, которые только сильнее путают и вгоняют в ужас меня как лоулевельного джуна, поэтому надеюсь на вас. Заранее спасибо

Answer 1

Реализовывать View для RESTfull сервиса - ошибка. View(как и Model) нужно только для MVC-приложения.

REST сервис должен возвращать данные, предпочтительно JSON. В большинстве случаев вы можете возвращать сам объект(который ищите по id), а Spring автоконвертирует его в JSON.

Фронт вам надо писать отдельно, на JS. В ванильном JS вы можете просто отправлять HTTP запросы на свой рест, и получать ответы используя XHR. Но это сложный способ, гораздо легче использовать какой нибудь фреимворк, например Angular или Vue.

Также вы можете не писать второй CustomRepository, а использовать аннотацию @Query на методе в обычном Repository.

READ ALSO
Какие ошибки присутствуют в данном “алгоритме”? [закрыт]

Какие ошибки присутствуют в данном “алгоритме”? [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

156
Свой класс меню для приложения Java

Свой класс меню для приложения Java

Я создал класс на основе класса JMenu, который принимает строковый ArrayList, хранящий названия подпунктов меню, и строку с названием пункта меню

348
Чем отличается Latency и Response time?

Чем отличается Latency и Response time?

В небезывестной книге Фаулера написано:

225