HTTP响应代码:415使用java将REST数据发送到REST时

时间:2016-05-25 03:53:19

标签: java json rest

所以我正在使用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数据。

0 个答案:

没有答案