Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Utilizando WEB API com SpringMVC

Apos concluir o curso de SpringMVC estou estudando por conta própria e estou com algumas duvidas sobre como trabalhar com a WEB API com SpringMVC.

Queria criar um Serviço que cadastrasse recursos na minha aplicação.

Ja fiz o curso de JAX-RS e tenho uma noção de como fazer, mas sei que com spring eu tenho varias anotações e beans que me ajudam na criação desses recursos com facilidade, por exemplo:

criar um serviço que produces alguma coisa eu consegui tranquilamente, ate pq no curso aparece alguma coisa:

@RequestMapping(value = "/lista")
    @ResponseBody
    public List<Pedido> listaService() {
        List<Pedido> pedidos = dao.lista();
        return pedidos;
}

unica duvida aqui é que eu queria passar um MediaType dentro do RequestMaping, mas n estou conseguindo. produces = MediaType.APPLICATION_JSON não funciona porque ?

Agora outra duvida: na hora de criar um serviço para cadastrar um "Pedido" eu estou totalmente perdido. Oque tenho ate agora é:

    @RequestMapping(method =  RequestMethod.POST, consumes = MediaType.APPLICATION_JSON)
    public ResponseEntity<Pedido>cadastra(@RequestBody Pedido pedido){

        return ResponseEntity<Pedido>(pedido ,HttpStatus.CREATED);

    }

Poderiam me explicar como funciona o consumes/produces dentro do @ResquestMapping, e também como eu devo retornar corretamente essa ResponseEntity<>, e o que significa o @RequestBody. e também a diferença entre a anotação @RestController e @Controller.

Qualquer artigo ou vídeo aula que possa me dar uma luz seria de grande ajuda para destravar essa parte dos meus estudos.

8 respostas

alguem ai pra me dar uma ajudinha ?

Durante a madrugada consegui esclarecer boa parte das minhas duvidas desse post, agora, a unica coisa que eu não entendo muito bem é o uso EntityResponse.

Como usar ele de forma correta? queria conseguir usar ele sem passar um type parameter, mas não estou conseguindo. Ele sempre fica pedindo um parâmetro só que eu n sei oq eu preciso passar ali.

    @PostMapping(value = "/cadastro")
    public ResponseEntity<??????> cadastra(@RequestBody Pedido pedido){
        dao.cadastra(pedido);
    return ResponseEntity<?????>(?????, HttpStatus.CREATED);
     }

Oi Julio, que bom que você já está entendendo mais! Eu escrevi esse post uma vez no meu blog => https://domineospring.wordpress.com/2016/04/15/combinando-angular-e-spring-mvc/

Acho que vai tirar bastante dúvida sua!

Show de bola Alberto, vi por fora em alguns foruns e artigos alguma anotações novas como @RestController, @"VERBO"Mapping e vi que elas se tratam da versão 4.alguma coisa do spring. Mas fiquei meio confuso se isso e springboot ou springMVC.

estou recebendo esse 415 ao enviar os recurosos ao meu serviço.

 The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

Estou utilizando o postman para enviar isso:

{"numeroPedido":1627,"data"=802321200000,"nomeProduto"="balinha","valor"=12,"quantidade"=20,"codCliente"=666}

o meu serviço ficou assim:

    @PostMapping(value = "/cadastro", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<?> cadastra(@RequestBody Pedido pedido){
        dao.cadastra(pedido);
    return ResponseEntity.ok().build();
     }

minha classe:

@Entity
public class Pedido implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @Column(unique = true)
    private Integer numeroPedido;

    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Calendar data;

    private String nomeProduto;
    private BigDecimal valor;
    private int quantidade;
    private Integer codCliente;

    public Integer getNumeroPedido() {
        return numeroPedido;
    }
    public void setNumeroPedido(Integer numeroPedido) {
        this.numeroPedido = numeroPedido;
    }

    public Calendar getData() {
        return data;
    }
//restante de getters e setters ...

não entendo oq esta errado :(

solução!

Ele ta dizendo que o formato dos dados enviados não é suportado pelo endpoint. Tenta só APPLICATION_JSON_VALUE

Alberto a implementação esta correta ?

  @PostMapping(value = "/cadastro", consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> cadastra(@RequestBody Pedido pedido){
        dao.cadastra(pedido);
    return ResponseEntity.ok().build();
     }

fiz oq vc falou e mesmo assim não vai.

você pode me dizer se tem alguma coisa que eu possa estar esquecendo? tipo um bean, ou mudar a anotação de @restcontroller so para @controller ou se eu preciso de alguma configuração no meu modelo ou DAO.