繁体   English   中英

HTTP状态415-将数据从ajax作为json传递到restfull服务器时出现不受支持的媒体类型错误

[英]HTTP Status 415 - Unsupported Media Type error when passing data from ajax to restfull server as json

我正在尝试使用ajax作为json将数据发送到Restful服务。 但是有些事情做对了。 我得到这个错误

在此处输入图片说明

我读到那可能是因为我没有添加一些jar文件,所以这是我拥有的文件: 在此处输入图片说明

我的ajax函数如下所示:

var url1 = "../web.projekat/rest/korisnici/registracija";

    $('#btnReg').click(function(){

            var memail = document.getElementById('email').value;
            var mkorIme = document.getElementById('korIme').value;
            var mpass = document.getElementById('pass1').value;


            $.ajax({
                type : 'POST',
                url : url1,
                contentType : 'application/json;charset=utf-8',
                dataType : "text",
                data : formToJSON(mkorIme, mpass, "ds", "dsdsd", "Menadzer",  "06315487", memail, "dsds"), 
                success : function(){
                    alert("Success");
                },

                error : function(){
                    alert("Error");
                }
            });
    });
});


function formToJSON(korIme, lozinka, ime, prezime, uloga, telefon, email, slika) {
    return JSON.stringify({
        "korIme" : korIme,
        "lozinka": lozinka,
        "ime": ime,
        "prezime": prezime,
        "uloga": uloga,
        "telefon": telefon,
        "email" : email,
        "slika": slika,
    });
}

我的html文件格式如下:

<form action="../web.projekat/rest/korisnici/registracija" id="regForm" method="post">
        <div class="form_container">

            <div id="email_div">
                <input type="text" id="email" placeholder="Email adresa">
                <span class="error">Unesite validnu email adresu.</span>
            </div>

            <div id="korIme_div">
                <input id="korIme" type="text" placeholder="Korisnicko ime"> 
                <span class="error">Unesite korisnicko ime.</span>
            </div>

            <div id="pass1_div">
                <input id="pass1" type="password" placeholder="Lozinka">
                <span class="error">Unesite lozinku.</span>
            </div>

            <div id="pass2_div">
                <input id="pass2" type="password" placeholder="Ponovite lozinku">
                <span class="error">Unesite lozinku ponovo.</span>
            </div>

            <input id="btnReg" type="submit" value="Registruj se">

            <p>Vec ste registrovani? <a href="prijava">Prijavite se.</a></p>
        </div>
    </form>

我的web.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5">
  <display-name>web.projekat</display-name>
  <welcome-file-list>
    <welcome-file>html/registration_form.html</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>controller</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

最后,我的休息服务类如下所示:

@Path("/korisnici")
public class KorisnikServis {

    @Context
    HttpServletRequest request;
    @Context
    ServletContext ctx;

    @POST
    @Path("/registracija")
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    @Produces(MediaType.TEXT_PLAIN)
    public String registracija(Korisnik data) {
        return "sdasd";
    }
}

当参数为Korisnik data时 ,不返回任何内容,当我将其更改为String数据时,它将返回数据。

我的Korisnik类具有所有参数, 构造函数,getter和setter。

那么,为什么我的应用程序无法识别发送给json屁股的数据? 它返回HTTP状态415-不支持的媒体类型错误。 谢谢您的帮助。

更新

我的Korisnik班级代码

public class Korisnik {
    public String kor_ime;
    public String lozinka;
    public String ime;
    public String prezime;
    public String uloga;
    public String telefon;
    public String email;
    public String slika;

    public Korisnik(){}

    public Korisnik(String kor_ime, String lozinka, String ime, String prezime, String uloga, String telefon, String email,
            String slika) {
        super();
        this.kor_ime = kor_ime;
        this.lozinka = lozinka;
        this.ime = ime;
        this.prezime = prezime;
        this.uloga = uloga;
        this.telefon = telefon;
        this.email = email;
        this.slika = slika;
    }

    public String getKor_ime() {
        return kor_ime;
    }

    public void setKor_ime(String kor_ime) {
        this.kor_ime = kor_ime;
    }

    public String getLozinka() {
        return lozinka;
    }

    public void setLozinka(String lozinka) {
        this.lozinka = lozinka;
    }

    public String getIme() {
        return ime;
    }

    public void setIme(String ime) {
        this.ime = ime;
    }

    public String getPrezime() {
        return prezime;
    }

    public void setPrezime(String prezime) {
        this.prezime = prezime;
    }

    public String getUloga() {
        return uloga;
    }

    public void setUloga(String uloga) {
        this.uloga = uloga;
    }

    public String getTelefon() {
        return telefon;
    }

    public void setTelefon(String telefon) {
        this.telefon = telefon;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSlika() {
        return slika;
    }

    public void setSlika(String slika) {
        this.slika = slika;
    }

    @Override
    public String toString() {
        return "Korisnik [kor_ime=" + kor_ime + ", ime=" + ime + ", prezime=" + prezime + "]";
    }
}

在AJAX请求中,您将dataType指定为文本,这就是为什么Web服务仅接受String的原因。 将您的dataType更改为application/json

编辑:

这实际上是错误的,您可能会看到另一个错误。 您应该尝试将AJAX请求中的contentType设置为application/json (删除;charset=utf-8 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM