我正在尝试使用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 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/