Spring 400使用RestTemplete和postForObject的错误请求
我正在使用Spring3构建两个应用程序。第一个是RESTAPI,第二个是客户端。客户端必须创建保留。我收到400个错误请求,请帮助 客户端应用程序中的课程预订:Spring 400使用RestTemplete和postForObject的错误请求,spring,spring-mvc,resttemplate,Spring,Spring Mvc,Resttemplate,我正在使用Spring3构建两个应用程序。第一个是RESTAPI,第二个是客户端。客户端必须创建保留。我收到400个错误请求,请帮助 客户端应用程序中的课程预订: package ma.ensias.agencecentrale.entities; import java.io.Serializable; import java.util.Collection; import javax.persistence.CascadeType; import javax.persistence.En
package ma.ensias.agencecentrale.entities;
import java.io.Serializable;
import java.util.Collection;
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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown=true)
@Entity
@Table(name="reservations")
public class Reservation implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idReservation;
private String date;
@ManyToOne
@JoinColumn(name="id_utilisateur")
private Utilisateur utilisateur;
@JsonIgnore
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="passager_reservation", joinColumns=@JoinColumn(name="id_reservation"), inverseJoinColumns=@JoinColumn(name="id_passager"))
private Collection<Passager> passagers;
@JsonIgnore
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="vol_reservation", joinColumns=@JoinColumn(name="id_reservation"), inverseJoinColumns=@JoinColumn(name="id_vol"))
private Collection<Vol> vols;
// Contructor without fields
public Reservation() {
super();
}
// contructor with date attribute
public Reservation(String date) {
super();
this.date = date;
}
// ----------------------- Getters and setters-------------------------------
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
@JsonProperty(value="client")
public Utilisateur getUtilisateur() {
return utilisateur;
}
public void setUtilisateur(Utilisateur utilisateur) {
this.utilisateur = utilisateur;
}
public Collection<Vol> getVols() {
return vols;
}
public void setVols(Collection<Vol> vols) {
this.vols = vols;
}
public Long getIdReservation() {
return idReservation;
}
}
package ma.ensias.agencevoyage.entities;
import java.io.Serializable;
import java.util.Collection;
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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown=true)
@Entity
@Table(name="reservations")
public class Reservation implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idReservation;
private String date;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="id_client")
private Client client;
@JsonIgnore
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="passager_reservation", joinColumns=@JoinColumn(name="id_reservation"), inverseJoinColumns=@JoinColumn(name="id_passager"))
private Collection<Passager> passagers;
@JsonIgnore
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="vol_reservation", joinColumns=@JoinColumn(name="id_reservation"), inverseJoinColumns=@JoinColumn(name="id_vol"))
private Collection<Vol> vols;
// Contructor without fields
public Reservation() {
super();
}
// contructor with date attribute
public Reservation(String date) {
super();
this.date = date;
}
// ----------------------- Getters and setters-------------------------------
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Collection<Passager> getPassagers() {
return passagers;
}
public void setPassagers(Collection<Passager> passagers) {
this.passagers = passagers;
}
public Collection<Vol> getVols() {
return vols;
}
public void setVols(Collection<Vol> vols) {
this.vols = vols;
}
}
和提供商应用程序中的课程预订:
package ma.ensias.agencecentrale.entities;
import java.io.Serializable;
import java.util.Collection;
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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown=true)
@Entity
@Table(name="reservations")
public class Reservation implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idReservation;
private String date;
@ManyToOne
@JoinColumn(name="id_utilisateur")
private Utilisateur utilisateur;
@JsonIgnore
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="passager_reservation", joinColumns=@JoinColumn(name="id_reservation"), inverseJoinColumns=@JoinColumn(name="id_passager"))
private Collection<Passager> passagers;
@JsonIgnore
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="vol_reservation", joinColumns=@JoinColumn(name="id_reservation"), inverseJoinColumns=@JoinColumn(name="id_vol"))
private Collection<Vol> vols;
// Contructor without fields
public Reservation() {
super();
}
// contructor with date attribute
public Reservation(String date) {
super();
this.date = date;
}
// ----------------------- Getters and setters-------------------------------
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
@JsonProperty(value="client")
public Utilisateur getUtilisateur() {
return utilisateur;
}
public void setUtilisateur(Utilisateur utilisateur) {
this.utilisateur = utilisateur;
}
public Collection<Vol> getVols() {
return vols;
}
public void setVols(Collection<Vol> vols) {
this.vols = vols;
}
public Long getIdReservation() {
return idReservation;
}
}
package ma.ensias.agencevoyage.entities;
import java.io.Serializable;
import java.util.Collection;
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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
@JsonIgnoreProperties(ignoreUnknown=true)
@Entity
@Table(name="reservations")
public class Reservation implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idReservation;
private String date;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="id_client")
private Client client;
@JsonIgnore
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="passager_reservation", joinColumns=@JoinColumn(name="id_reservation"), inverseJoinColumns=@JoinColumn(name="id_passager"))
private Collection<Passager> passagers;
@JsonIgnore
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="vol_reservation", joinColumns=@JoinColumn(name="id_reservation"), inverseJoinColumns=@JoinColumn(name="id_vol"))
private Collection<Vol> vols;
// Contructor without fields
public Reservation() {
super();
}
// contructor with date attribute
public Reservation(String date) {
super();
this.date = date;
}
// ----------------------- Getters and setters-------------------------------
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public Collection<Passager> getPassagers() {
return passagers;
}
public void setPassagers(Collection<Passager> passagers) {
this.passagers = passagers;
}
public Collection<Vol> getVols() {
return vols;
}
public void setVols(Collection<Vol> vols) {
this.vols = vols;
}
}
根本原因:提供程序控制器中设置的内容类型存在问题:
@RequestMapping(value = "/ajouterReservation", method = RequestMethod.POST, consumes="application/json")
public ResponseEntity<String> ajouterReservation(@RequestBody Reservation reservation)
根本原因:提供程序控制器中设置的内容类型存在问题:
@RequestMapping(value = "/ajouterReservation", method = RequestMethod.POST, consumes="application/json")
public ResponseEntity<String> ajouterReservation(@RequestBody Reservation reservation)
尝试删除提供者中的consume=“application/json”,或者在创建rest callI之前设置content type header,但我已经尝试过了,没有consume=“application/json”和设置header,但是我得到了相同的错误,然后是时候分析保留实例了,用输入请求体更新答案。另外,请尝试删除@RequestBody,并检查rest cal是否已成功创建,以标识提供程序中的根用户,或者在创建rest CALI之前,先设置内容类型头,而不使用consume=“application/json”和设置标题,但我得到相同的错误,然后是时候分析保留实例了,用输入请求主体更新答案。同时尝试删除@RequestBody并检查rest cal是否成功识别根原因第二种解决方案解决了我的问题,但我仍然不知道为什么。将“consumes=”application/json“添加到handler methode是否与使用httpheader时所做的相同?第二个解决方案解决了我的问题,但我仍然不知道为什么。将“consumes=”application/json“添加到handler methode是否与使用HttpHeaders所做的相同
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers=new HttpHeaders();
headers.set("Content-Type", "application/json");
HttpEntity requestEntity=new HttpEntity(reservation, headers);
Reservation addedRes = restTemplate.exchange(REST_SERVICE_URI, HttpMethod.POST,requestEntity,Reservation.class);