3
respostas

Criando API GET e POST

Bom, estou tentando fazer uma API simples de GET e POST com um objeto produtos.

Fiz o sistema de Validation utilizando o conceito aprendido nas aulas de Spring MVC porém tenho uma duvida, quando der erro de validação como posso retornar um BAD REQUEST com a mensagem de erro em formato JSON?

Meu codigo está assim, já retorna o badRequest, mas queria por um body com a mensagem de erro, o result pode nos ajudar nisso?

@PostMapping(consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_FORM_URLENCODED_VALUE})
    public ResponseEntity createProductByForm(@Valid Product product, BindingResult result) {
        if (result.hasErrors()) {
            return ResponseEntity.badRequest().build();
        }
        return ResponseEntity.ok(productRepository.save(product));
    }
3 respostas

Oi Matheus,Depois do seu ResponseEntity.badRequest() é possível chamar outros métodos além de build(), um deles é o body() que recebe um objeto. No seu caso ficaria algo como: ResponseEntity.badRequest().body(suaReferenciaQueRepresentaraOJSON); Um outro detalhe é o retorno do seu método que está como ResponseEntity. É possível passar um generics pra ele indicando o tipo do objeto, que nesse caso fará mais sentindo um wildcard já que não se sabe ao certo o que poderá vir: ResponseEntity<?>

Espero ter ajudado =]

Sim eu sei do metodo body, mas queria saber se o results gera algum tipo de erro em JSON, e se não gera o que teria que fazer para mostrar as mensagens de erros do result em formato JSON.

Qual a diferença entre ResponseEntity e ResponseEntity<?> ?

Oi Matheus, Qualquer Objeto que você enviar o Spring já vai serializar para json. O que você pode fazer é construir um modelo que represente esses erros e enviar pelo body. Com o BindingResult vc pode pegar os erros e os códigos de cada um deles por exemplo. Quanto ao wildcard é porque nesse caso você pode mandar dois ResponseEntity diferentes, pode ser um carregando seu produto ou outro carregando seus erros