Class AbstractReadOnlyController<E,D,ID,FD extends GenericFilterDTO>
📄 Controller Base — Somente Leitura (Views JPA / @Immutable)
Para recursos materializados a partir de views do banco ou entidades @Immutable,
este controller oferece uma superfĂcie de leitura completa — e bloqueia escrita com 405.
Sem duplicar endpoints; você herda e ganha tudo de graça.
✨ O que vem pronto
/{id}/all/filter/filter/cursor/locate/by-ids/options/filter/options/by-ids/option-sources/{sourceKey}/options/filter/option-sources/{sourceKey}/options/by-ids/stats/group-by/stats/timeseries/stats/distribution/schemas → /schemas/filteredEscrita segura: POST /, PUT /{id}, DELETE /{id}, DELETE /batch → 405 Method Not Allowed
Filtros (26 operações) + paginação tradicional e por cursor; options id/label, option-sources, stats e schema x-ui.
Quando escolher esta base
- Views materializadas, visoes SQL ou entidades anotadas com
@Immutable. - Recursos analiticos ou de consulta em que a escrita nao deve ser exposta pela API.
- Superficies em que a UI ainda precisa de filtros, options e schema metadata-driven.
Esta classe preserva a mesma superficie de leitura do CRUD base e apenas sobrescreve as
operacoes mutantes para responder com 405 Method Not Allowed. Assim, a API continua
coerente para consumidores de schema, filtros e componentes dinâmicos, sem sugerir capacidades
de escrita inexistentes.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionorg.springframework.http.ResponseEntity<RestApiResponse<D>> Bloqueia criacao de registros em recursos somente leitura.org.springframework.http.ResponseEntity<Void> Bloqueia exclusao individual de registros em recursos somente leitura.org.springframework.http.ResponseEntity<Void> deleteBatch(List<ID> ids) Bloqueia exclusao em lote de registros em recursos somente leitura.protected booleanIndica se o recurso Ă© somente leitura.org.springframework.http.ResponseEntity<RestApiResponse<D>> Bloqueia atualizacao de registros em recursos somente leitura.Methods inherited from class org.praxisplatform.uischema.controller.base.AbstractCrudController
allowCreate, allowDelete, allowUpdate, distributionStats, filter, filterByCursor, filterOptions, filterOptionSourceOptions, getAll, getBasePath, getById, getByIds, getControllerClass, getDtoId, getEntityId, getIdFieldName, getOptionsByIds, getOptionSourceOptionsByIds, getSchema, getService, groupByStats, initializeBasePath, linkToAll, linkToCreate, linkToDelete, linkToDocs, linkToFilter, linkToFilterCursor, linkToSelf, linkToUiSchema, linkToUpdate, locate, setBasePath, timeSeriesStats, toDto, toEntity, toEntityModel, toResourceModel
-
Constructor Details
-
AbstractReadOnlyController
public AbstractReadOnlyController()
-
-
Method Details
-
isReadOnlyResource
protected boolean isReadOnlyResource()Description copied from class:AbstractCrudControllerIndica se o recurso Ă© somente leitura. Subclasses podem sobrescrever.- Overrides:
isReadOnlyResourcein classAbstractCrudController<E,D, ID, FD extends GenericFilterDTO>
-
create
@PostMapping public org.springframework.http.ResponseEntity<RestApiResponse<D>> create(@Valid @RequestBody D dto) Bloqueia criacao de registros em recursos somente leitura.A operacao e mantida no controller apenas para preservar a simetria contratual com a base CRUD. Na pratica, qualquer tentativa de
POST /falha com405, deixando claro para clientes HTTP e para integradores que o recurso nao aceita escrita.- Overrides:
createin classAbstractCrudController<E,D, ID, FD extends GenericFilterDTO> - Parameters:
dto- payload recebido; ignorado porque a operacao e proibida- Returns:
- nunca retorna normalmente
- Throws:
org.springframework.web.server.ResponseStatusException- sempre com405 Method Not Allowed
-
update
@PutMapping("/{id}") public org.springframework.http.ResponseEntity<RestApiResponse<D>> update(@PathVariable ID id, @Valid @RequestBody D dto) Bloqueia atualizacao de registros em recursos somente leitura.- Overrides:
updatein classAbstractCrudController<E,D, ID, FD extends GenericFilterDTO> - Parameters:
id- identificador do recurso alvodto- payload recebido; ignorado porque a operacao e proibida- Returns:
- nunca retorna normalmente
- Throws:
org.springframework.web.server.ResponseStatusException- sempre com405 Method Not Allowed
-
delete
@DeleteMapping("/{id}") public org.springframework.http.ResponseEntity<Void> delete(@PathVariable ID id) Bloqueia exclusao individual de registros em recursos somente leitura.- Overrides:
deletein classAbstractCrudController<E,D, ID, FD extends GenericFilterDTO> - Parameters:
id- identificador do recurso alvo- Returns:
- nunca retorna normalmente
- Throws:
org.springframework.web.server.ResponseStatusException- sempre com405 Method Not Allowed
-
deleteBatch
@DeleteMapping("/batch") public org.springframework.http.ResponseEntity<Void> deleteBatch(@RequestBody List<ID> ids) Bloqueia exclusao em lote de registros em recursos somente leitura.- Overrides:
deleteBatchin classAbstractCrudController<E,D, ID, FD extends GenericFilterDTO> - Parameters:
ids- identificadores recebidos; ignorados porque a operacao e proibida- Returns:
- nunca retorna normalmente
- Throws:
org.springframework.web.server.ResponseStatusException- sempre com405 Method Not Allowed
-