Estou aprendendo Spring REST e por curiosidade surgiu uma dúvida, tenho um controller e tenho GET, POST e PUT. Minha curiosidade é, pode ter mais de um POST no controller, na minha cabeça não conseguir criar algum cenário para adicionar mais um post, segue o código!
@RestController
@RequestMapping(value = "/restaurantes")
public class RestauranteController {
@Autowired
private RestauranteRepository restauranteRepository;
@Autowired
private CadastroRestauranteService cadastroRestauranteService;
@Autowired
private SmartValidator smartValidator;
@GetMapping
public List<RestauranteDTO> listar() {
List<Restaurante> restaurantes = restauranteRepository.findAll();
return toCollectionDTO(restaurantes);
}
@GetMapping(value = "/{RestauranteId}")
public RestauranteDTO buscar(@PathVariable Long RestauranteId) {
Restaurante restaurante = cadastroRestauranteService.buscarOuFalhar(RestauranteId);
return toDTO(restaurante);
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public RestauranteDTO adicionar(@RequestBody @Valid RestauranteInput restauranteInput) {
try {
Restaurante restaurante = toDomainObject(restauranteInput);
RestauranteDTO restauranteDTO = toDTO(cadastroRestauranteService.salvar(restaurante));
return restauranteDTO;
} catch (CozinhaNaoEncontradaException e) {
throw new NegocioException(e.getMessage());
}
}
@PutMapping(value = "/{restauranteId}")
public RestauranteDTO atualizar(@PathVariable Long restauranteId, @RequestBody @Valid RestauranteInput restauranteInput) {
try {
Restaurante restaurante = toDomainObject(restauranteInput);
Restaurante restauranteRecuperado = cadastroRestauranteService.buscarOuFalhar(restauranteId);
BeanUtils.copyProperties(restaurante, restauranteRecuperado, "id", "formasPagamento", "endereco", "dataCadastro", "produtos"); //
RestauranteDTO restauranteDTO = toDTO(cadastroRestauranteService.salvar(restauranteRecuperado));
return restauranteDTO;
} catch (CozinhaNaoEncontradaException e) {
throw new NegocioException(e.getMessage());
}
}
private RestauranteDTO toDTO(Restaurante restaurante) {
CozinhaDTO cozinhaDTO = new CozinhaDTO();
cozinhaDTO.setId(restaurante.getCozinha().getId());
cozinhaDTO.setNome(restaurante.getCozinha().getNome());
RestauranteDTO restauranteDTO = new RestauranteDTO();
restauranteDTO.setId(restaurante.getId());
restauranteDTO.setNome(restaurante.getNome());
restauranteDTO.setTaxaFrete(restaurante.getTaxaFrete());
restauranteDTO.setCozinhaId(cozinhaDTO);
return restauranteDTO;
}
private List<RestauranteDTO> toCollectionDTO(List<Restaurante> restaurantes){
return restaurantes.stream()
.map(restaurante -> toDTO(restaurante))
.collect(Collectors.toList());
}
/*Dado um RestauranteInput, eu retorno um restauranre*/
private Restaurante toDomainObject(RestauranteInput restauranteInput) {
Restaurante restaurante = new Restaurante();
Cozinha cozinha = new Cozinha();
cozinha.setId(restauranteInput.getCozinhaInput().getId());
restaurante.setNome(restauranteInput.getNome());
restaurante.setTaxaFrete(restauranteInput.getTaxaFrete());
restaurante.setCozinha(cozinha);
return restaurante;
}
}