简体   繁体   English

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

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

I am trying to send data with ajax as json to restful service. 我正在尝试使用ajax作为json将数据发送到Restful服务。 But something is not done right. 但是有些事情做对了。 I get this error 我得到这个错误

在此处输入图片说明

I read that that's maybe because I didn't add some jar files, so this are the files that I have: 我读到那可能是因为我没有添加一些jar文件,所以这是我拥有的文件: 在此处输入图片说明

My ajax function looks like this: 我的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,
    });
}

My html file with the form looks like this: 我的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>

And my web.xml looks like this: 我的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>

And finally my rest service class looks like this: 最后,我的休息服务类如下所示:

@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";
    }
}

Nothing is returned while the argument is Korisnik data , when I change it to String data it returning the data. 当参数为Korisnik data时 ,不返回任何内容,当我将其更改为String数据时,它将返回数据。

My Korisnik class has all the parameters and condtructors and getters and setters. 我的Korisnik类具有所有参数, 构造函数,getter和setter。

So why can't my application recognize the data that's sent ass json? 那么,为什么我的应用程序无法识别发送给json屁股的数据? It is returning the HTTP Status 415 - Unsupported Media Type error. 它返回HTTP状态415-不支持的媒体类型错误。 Thank you for your help. 谢谢您的帮助。

UPDATE 更新

My Korisnik class code 我的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 + "]";
    }
}

In your AJAX request, you are specifying your dataType as text, which is why your web service is only accepting a String. 在AJAX请求中,您将dataType指定为文本,这就是为什么Web服务仅接受String的原因。 Change your dataType to application/json . 将您的dataType更改为application/json

EDIT: 编辑:

This actually is wrong, you would probably be seeing a different error. 这实际上是错误的,您可能会看到另一个错误。 You should try setting your contentType in your AJAX request to be just application/json (remove ;charset=utf-8 ). 您应该尝试将AJAX请求中的contentType设置为application/json (删除;charset=utf-8 )。

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

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