Boa tarde,
Estou tentando fazer uma requisição de POST mas quando tento fazer tenho o seguinte erro:
{
"timestamp":1585578507159,
"status":415,
"error":"Unsupported Media Type",
"message":"Content type 'application/json;charset=UTF-8' not supported",
"trace":"org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported\r\n\tat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:225)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\r\n\tat org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)\r\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:660)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1591)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n\tat java.lang.Thread.run(Unknown Source)\r\n",
"path":"/pedidos/"
}
Link do repositório: https://github.com/wferreiracosta/alfred
Classe resource:
package com.wferreiracosta.alfred.resource;
import java.net.URI;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import com.wferreiracosta.alfred.domain.Pedido;
import com.wferreiracosta.alfred.service.PedidoService;
@RestController
@RequestMapping(value = "/pedidos")
public class PedidoResource {
@Autowired
private PedidoService service;
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<?> find(@PathVariable Integer id) {
Pedido obj = service.find(id);
return ResponseEntity.ok().body(obj);
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Void> insert(@Valid @RequestBody Pedido obj) {
obj = this.service.insert(obj);
URI uri = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(obj.getId()).toUri();
return ResponseEntity.created(uri).build();
}
}
Classe domain Pedido:
package com.wferreiracosta.alfred.domain;
import java.io.Serializable;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import com.fasterxml.jackson.annotation.JsonFormat;
@Entity
public class Pedido implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@JsonFormat(pattern = "dd/MM/yyyy HH:mm")
private Date instante;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "pedido")
private Pagamento pagamento;
@ManyToOne
@JoinColumn(name = "cliente_id")
private Cliente cliente;
@ManyToOne
@JoinColumn(name = "endereco_entrega_id")
private Endereco enderecoEntrega;
@OneToMany(mappedBy = "id.pedido")
private Set<ItemPedido> itens = new HashSet<>();
public Pedido() {
super();
}
public Pedido(Integer id, Date instante, Cliente cliente, Endereco enderecoEntrega) {
super();
this.id = id;
this.instante = instante;
this.cliente = cliente;
this.enderecoEntrega = enderecoEntrega;
}
public double getValorTotal() {
double soma = 0;
for (ItemPedido ip : itens) {
soma += ip.getSubTotal();
}
return soma;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getInstante() {
return instante;
}
public void setInstante(Date instante) {
this.instante = instante;
}
public Pagamento getPagamento() {
return pagamento;
}
public void setPagamento(Pagamento pagamento) {
this.pagamento = pagamento;
}
public Endereco getEnderecoEntrega() {
return enderecoEntrega;
}
public void setEnderecoEntrega(Endereco enderecoEntrega) {
this.enderecoEntrega = enderecoEntrega;
}
public Set<ItemPedido> getItens() {
return itens;
}
public void setItens(Set<ItemPedido> itens) {
this.itens = itens;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pedido other = (Pedido) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("pt","BR"));
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
StringBuilder builder = new StringBuilder();
builder.append("Pedido Numero: ");
builder.append(this.getId());
builder.append(", Instante: ");
builder.append(sdf.format(this.getInstante()));
builder.append(", Cliente: ");
builder.append(this.getCliente().getNome());
builder.append(", Situação do pagamento: ");
builder.append(this.getPagamento().getEstado().getDescricao());
builder.append("\nDetalhes:\n");
this.getItens().forEach(x -> builder.append(x.toString()));
builder.append("Valor Total: ");
builder.append(nf.format(this.getValorTotal()));
return builder.toString();
}
}
Classe domain Pagamento:
package com.wferreiracosta.alfred.domain;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.MapsId;
import javax.persistence.OneToOne;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.wferreiracosta.alfred.enums.EstadoPagamento;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@type")
public abstract class Pagamento implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private Integer id;
private Integer estado;
@JsonIgnore
@OneToOne
@JoinColumn(name = "pedido_id")
@MapsId
private Pedido pedido;
public Pagamento() {
super();
}
public Pagamento(Integer id, EstadoPagamento estado, Pedido pedido) {
super();
this.id = id;
this.estado = (estado == null) ? null : estado.getId();
this.pedido = pedido;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public EstadoPagamento getEstado() {
return EstadoPagamento.toEnum(estado);
}
public void setEstado(EstadoPagamento estado) {
this.estado = estado.getId();
}
public Pedido getPedido() {
return pedido;
}
public void setPedido(Pedido pedido) {
this.pedido = pedido;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pagamento other = (Pagamento) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
Classe domain ItemPedido:
package com.wferreiracosta.alfred.domain;
import java.io.Serializable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
public class ItemPedido implements Serializable {
private static final long serialVersionUID = 1L;
@JsonIgnore
@EmbeddedId
private ItemPedidoPK id = new ItemPedidoPK();
private Double desconto;
private Integer quantidade;
private Double preco;
public ItemPedido() {
super();
}
public ItemPedido(Pedido pedido, Produto produto, Double desconto, Integer quantidade, Double preco) {
super();
this.id.setPedido(pedido);
this.id.setProduto(produto);
this.desconto = desconto;
this.quantidade = quantidade;
this.preco = preco;
}
public Double getSubTotal() {
return (this.preco - this.desconto) * this.quantidade;
}
@JsonIgnore
public Pedido getPedido() {
return this.id.getPedido();
}
public void setPedido(Pedido pedido) {
this.id.setPedido(pedido);
}
public void setProduto(Produto produto) {
this.id.setProduto(produto);
}
public Produto getProduto() {
return this.id.getProduto();
}
public ItemPedidoPK getId() {
return id;
}
public void setId(ItemPedidoPK id) {
this.id = id;
}
public Double getDesconto() {
return desconto;
}
public void setDesconto(Double desconto) {
this.desconto = desconto;
}
public Integer getQuantidade() {
return quantidade;
}
public void setQuantidade(Integer quantidade) {
this.quantidade = quantidade;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ItemPedido other = (ItemPedido) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
Classe domain PagamentoComBoleto:
package com.wferreiracosta.alfred.domain;
import java.util.Date;
import javax.persistence.Entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.wferreiracosta.alfred.enums.EstadoPagamento;
@Entity
@JsonTypeName("pagamentoComBoleto")
public class PagamentoComBoleto extends Pagamento {
private static final long serialVersionUID = 1L;
@JsonFormat(pattern="dd//MM/yyyy HH:mm")
private Date dataVencimento;
@JsonFormat(pattern="dd//MM/yyyy HH:mm")
private Date dataPagamento;
public PagamentoComBoleto() {
super();
}
public PagamentoComBoleto(Integer id, EstadoPagamento estado, Pedido pedido, Date dataVencimento,
Date dataPagamento) {
super(id, estado, pedido);
this.dataVencimento = dataVencimento;
this.dataPagamento = dataPagamento;
}
public Date getDataVencimento() {
return dataVencimento;
}
public void setDataVencimento(Date dataVencimento) {
this.dataVencimento = dataVencimento;
}
public Date getDataPagamento() {
return dataPagamento;
}
public void setDataPagamento(Date dataPagamento) {
this.dataPagamento = dataPagamento;
}
}