SB NAL Flashcards
Ao criar um novo projeto Spring, qual dependência provê recursos para criação de um backend restful?
Web / Spring Web
Qual a nomenclatura padrão para um controlador rest?
NomeEntidadeResource dentro de main/java/resources
Quais anotações vão em uma classe controladora rest?
@RestController e @RequestMapping(value=”/entidades”)
Caso URI tenha mais de uma palavra, utilizar kebab-case
Qual anotação vai num método endpoint rest?
@RequestMapping(method=RequestMethod.GET)
… ou POST
O que deve ser criado durante a implementação de uma nova entidade?
Atributos, associações (se coleção inicializar), construtores sem coleções, getters e setters, hashCode e equals, serializable padrão
Em qual pacote vão as classes de domínio?
main/java/domain
Quais são as anotações básicas para o mapeamento OR / JPA de uma entidade?
@Entity (javax) no class
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) no id
Quais são as chaves (chave-valor) básicas no application-properties?
spring. datasource. (url,username,password)
spring. jpa. (show-sql, properties.hibernate.format_sql)
Como se organizam as camadas numa aplicação restful?
Frontend «_space; »_space; Controladores rest (resource) -instancia-> Serviço (service) -instancia-> DAO (repo)
Em qual pacote vão as classes de acesso a dados?
Qual o padrão de nomenclatura?
main/java/repositories
NomeEntidadeRepository
Qual anotação básica deve conter uma interface de acesso a dados? Qual classe deve estender?
@Repository (também troca de class para interface e estende JpaRepository )
Qual a nomenclatura padrão para um serviço rest?
NomeEntidadeService dentro de main/java/services
Quais anotações vão em uma classe service rest?
@Service
Quando alguém dá post em um novo resource, que resposta o endpoint deve dar?
Uma response 201 CREATED e o link para recuperar/get o recurso recém criado.
Não sendo possível dar o link, uma resposta 202 ACCEPTED apenas.
Considerando que o método repo.save(obj) do spring data serve tanto para salvar como atualizar, como garantir que a operação será um save ou update?
No service, antes do repo.save(obj) setar o id do obj para nulo quando quiser salvar, ou garantir que o id seja existente quando quiser atualizar.
É aconselhável evitar o uso de try/catch nas classes resource/controller. O quê fazer então?
Utilize @ControllerAdvice @ExceptionHandler numa classe ResourceExceptionHandler
Considere o exemplo: Ao consumir o endpoint /categorias a resposta traz também uma coleção de produtos dentro de cada categoria. Como evitar isso sem utilizar JSON Ignore?
Adotando o padrão DTO, no qual seria criado um DTO específico (uma projeção) de categoria no qual não constaria nenhum produto.
Como converter objetos para objetoDTO de maneira prática?
Criando um construtor no ObjetoDTO que receba o Objeto como parâmetro. No controlador list.stream().map(obj -> new ObjDTO(obj))
Considere um endpoint buscarPagina(Integer pagina)
Qual anotação deve ser utilizada para esperar que a página venha como parâmetro opcional na URL?
@RequestParam(value=”pagina”, defaultValue=”0”) Integer pagina
Bean validation é útil em quais tipos de requisição?
POST e PUT
Considere uma entidade pessoa. Como fazer validação sintática para que o nome não possa ser vazio e tenha mais que 2 caracteres?
Na entidade.
@NotEmpty(message=”Preenchimento obrigatório.”)
@Length(min=2, message=”Nome inválido.”)
No parâmetro do endpoint.
@Valid
Quais os passos para tratar uma exceção retornada crua na requisição?
Inclua a exceção específica no ResourceExceptionHandler e retorne uma ResponseEntity
Como implementar uma busca por campo?
Na interface repository Entidade findByNomeCampo(String parametro);
Qual é o tipo padrão retornado por um endpoint?
ResponseEntity< >
Quais dependências são necessárias para trabalhar com JWT?
spring-boot-starter-security
io.jsonwebtoken
A classe de configuração do JWT deve herdar qual classe?
SecurityConfig extends WebSecurityConfigurerAdapter
Quais anotações devem conter no arquivo de configuração do JWT?
@Configuration
@EnableWebSecurity
Como liberar uma URL para acesso sem validação?
Na classe que estende WebSecurityConfigurerAdapter:
String[] PUBLIC_MATCHERS = {“/url-um/”, “/url-dois/”}
Sobrescreve configure:
http.authorizeRequests().antMatchers … permitAll()
Como liberar acesso de múltiplas fontes? (cross origin)
Na classe que estende WebSecurityConfigurerAdapter: @Bean CorsConfigurationSource ccs() { ... }
Qual classe deve ser implementada para gerenciar usuários com spring security?
class UsuarioSpring implements UserDetails { … }