所以我正在使用JAVA应用程序尝试使用json将POST发送到RESTful服务器(也在JAVA中),但是我一直收到415 HTTP响应,这是我的客户端代码:
URL url;
try {
url = new URL(uri);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("contentType", "application/json");
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(data);
System.out.println(data);
} catch (Exception e) {
System.out.println(e);
}
这是我与我试图发送的数据相处的例外(我省略了链接):
{"idEleve":"null","pseudo":"ddd","pass":"ddd"}
java.io.IOException: Server returned HTTP response code: 415 for URL: ...
这是服务器期望的数据:
@POST
@Override
@Consumes({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
public void create(Eleve entity) {
super.create(entity);
}
很明显,它已经期待一个JSON,并且服务本身没有任何问题,因为当我尝试使用我想要发送的精确jsonObject测试它时,它会成功创建它。
The Eleve class
@Entity
@Table(name = "eleve")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Eleve.findAll", query = "SELECT e FROM Eleve e"),
@NamedQuery(name = "Eleve.findByIdEleve", query = "SELECT e FROM Eleve e WHERE e.idEleve = :idEleve")})
public class Eleve implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_eleve")
private Integer idEleve;
@Basic(optional = false)
@NotNull
@Lob
@Size(min = 1, max = 65535)
@Column(name = "pseudo")
private String pseudo;
@Basic(optional = false)
@NotNull
@Lob
@Size(min = 1, max = 65535)
@Column(name = "pass")
private String pass;
public Eleve() {
}
public Eleve(Integer idEleve) {
this.idEleve = idEleve;
}
public Eleve(Integer idEleve, String pseudo, String pass) {
this.idEleve = idEleve;
this.pseudo = pseudo;
this.pass = pass;
}
public Integer getIdEleve() {
return idEleve;
}
public void setIdEleve(Integer idEleve) {
this.idEleve = idEleve;
}
public String getPseudo() {
return pseudo;
}
public void setPseudo(String pseudo) {
this.pseudo = pseudo;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public int hashCode() {
int hash = 0;
hash += (idEleve != null ? idEleve.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Eleve)) {
return false;
}
Eleve other = (Eleve) object;
if ((this.idEleve == null && other.idEleve != null) || (this.idEleve != null && !this.idEleve.equals(other.idEleve))) {
return false;
}
return true;
}
@Override
public String toString() {
return "model.Eleve[ idEleve=" + idEleve + " ]";
}
}
注意:当我替换
时也值得一提conn.setRequestProperty("contentType", "application/json");
通过
conn.setRequestProperty("Content-Type", "application/json");
我收到400 HTTP错误,与其他线程不同,我的glassfish测试使用相同的JSON数据。