1
resposta

[Dúvida] ResponseEntity no metodo na classe de servico.

Olá, minha dúvida é a seguinte: Há algum problema em o método na classe de controle não ter retorno ou seja (void) enquanto o método na classe de serviço retornar uma** ResponseEntity **?

//AbrigoController.java
  @PostMapping
    @Transactional
    public **void** cadastrar(@RequestBody @Valid CadastrarAbrigoDto dto) {
        this.abrigoService.verificarSeAbrigoJaExiste(dto);
    }
//AbrigoService
public **ResponseEntity<String>** verificarSeAbrigoJaExiste(CadastrarAbrigoDto dto){
        boolean abrigoJaCadastrado = abrigoRepository.existsByNomeOrTelefoneOrEmail(dto.nome(),dto.telefone(),dto.email());

        if (abrigoJaCadastrado) {
            return ResponseEntity.badRequest().body("Dados já cadastrados para outro abrigo!");
        } else {
            Abrigo abrigo = new Abrigo(dto.nome(), dto.telefone(), dto.email());
            abrigoRepository.save(abrigo);
            return ResponseEntity.ok().build();
        }
    }
1 resposta

Olá Leandro!

Em geral, o padrão é que o Controller seja responsável por lidar com as respostas HTTP, enquanto o Service lida com a lógica de negócios. No seu caso, a lógica de negócios está no método verificarSeAbrigoJaExiste da classe AbrigoService, que retorna um ResponseEntity. Isso pode não ser ideal, pois mistura a lógica de negócios com a lógica de apresentação.

Uma abordagem mais comum seria o método de serviço retornar um tipo mais genérico, como um booleano ou uma exceção personalizada, e deixar o Controller decidir qual ResponseEntity deve ser retornado. Dessa forma, você mantém a lógica de negócios no serviço e a lógica de resposta HTTP no controlador. Isso torna o código mais limpo e alinhado com as boas práticas de separação de responsabilidades.

Espero ter ajudado e bons estudos!