Acelere telas baseadas em Views do banco (ou entidades marcadas como
@Immutable) com o modo read‑only do Starter.
405 Method Not Allowed.GET /{id} — busca registro por IDGET /all — lista completa (aplica ordenação padrão se
configurada)POST /filter — paginação/filtragem via
SpecificationsPOST /filter/cursor — paginação por cursor
(keyset)POST /locate — retorna posição absoluta e página de um
ID com base no filtro/sortGET /by-ids — múltiplos registros por IDs na ordem
solicitadaPOST /options/filter — opções id/label para selects
(paginadas)GET /options/by-ids — opções por IDs (ordem
preservada)GET /schemas — redirect para
/schemas/filtered do recursoBloqueadas:
POST /,PUT /{id},DELETE /{id},DELETE /batch→405.
import org.hibernate.annotations.Immutable;
@Entity @Immutable
@Table(name = "vw_vendas_resumo")
public class VendaResumo { /* campos da view */ }public interface VendaResumoRepository extends BaseCrudRepository<VendaResumo, Long> { }@Service
public class VendaResumoService extends AbstractReadOnlyService<VendaResumo, VendaResumoDTO, Long, VendaResumoFilterDTO> {
public VendaResumoService(VendaResumoRepository repo) { super(repo, VendaResumo.class); }
}@ApiResource("/api/relatorios/vendas-resumo")
@ApiGroup("relatorios")
@RestController
public class VendaResumoController extends AbstractReadOnlyController<
VendaResumo, VendaResumoDTO, Long, VendaResumoFilterDTO> {
@Autowired private VendaResumoService service;
@Override protected BaseCrudService<VendaResumo, VendaResumoDTO, Long, VendaResumoFilterDTO> getService() { return service; }
@Override protected Long getEntityId(VendaResumo e) { return e.getId(); }
@Override protected Long getDtoId(VendaResumoDTO d) { return d.getId(); }
@Override protected VendaResumoDTO toDto(VendaResumo e) { /* map */ }
@Override protected VendaResumo toEntity(VendaResumoDTO d) { /* map */ }
}@Filterable no DTO de filtro para Specifications
(26 operações)@DefaultSortColumn na entidade para ordenação
padrãoRecursos read-only tambem participam do contrato canonico de apresentacao de valor.
Diretrizes:
x-ui.valuePresentation quando a intencao de exibicao for
inferivelcurrency,
percentage, date, datetime,
time, number e booleanvaluePresentation nao deve ser usado como contrato
automatico para ranges, selecoes ou IDs semanticosextraProperties aninhado no @UISchemaIsso garante que superficies read-only e metadata-driven consumam a mesma semantica horizontal de exibicao, sem depender apenas de heuristicas locais do frontend.
options e
/schemas/filtered aceleram formulários/tabelas
read‑only.RestApiResponse) e HATEOAS opcional.