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

标签 java jquery json ajax

我正在尝试使用ajax将数据作为json发送到restful服务。但有些事情做得不对。我收到此错误

enter image description here

我读到这可能是因为我没有添加一些 jar 文件,所以这是我拥有的文件: enter image description here

我的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 data时,它会返回数据。

我的Korisnik类拥有所有参数、构造函数、getter 和 setter。

那么为什么我的应用程序无法识别发送给 ass 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 服务仅接受字符串的原因。将 dataType 更改为 application/json

编辑:

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

关于java - HTTP 状态 415 - 将数据从 ajax 作为 json 传递到 Restfull 服务器时出现不支持的媒体类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39374093/

相关文章:

java - 返回数组中的最大值

java - Android 每日通知在错误的时间多次显示

json - swift 中的 AlamofireObjectMapper

java - Spring MVC 在使用 Ajax 调用时返回简单文本而不是 JSON

javascript - 如何使用 lodash.js 或 underscore.js 过滤 json?

JavaScript 选择类似数组的对象?

java - 如果超出最大行数,则使用 java 和 POIExcel util 创建额外的 excel 文件

java - jsoup getElements MatchingOwn Text(其单一方法分割限制)识别html元素的示例

jquery - 改变 jQuery UI 日期选择器格式

javascript - 从链接中删除格式,但不删除里面的文本