[英]How to read the data that's sent from ajax on rest server
尝试读取使用ajax函数从客户端发送到服务器的数据时遇到问题。
首先,这是我的ajax函数;
$(document).ready(function(){
$('#btnReg').click(function(){
var email = document.getElementById('email').value;
var korIme = document.getElementById('korIme').value;
var lozinka = document.getElementById('pass1').value;
$.ajax({
type: 'POST',
url: 'http://localhost:8080/Web_Projekat/rest/korisnici/registracija',
contentType: 'application/json',
dataType: 'text',
data: formToJSON(korIme, lozinka, "Petar", "Petrovic", "Menadzer", "06315487", email, "slika"),
success: function(){
alert("Success");
},
error: function(){
alert("Error");
}
});
} else {
return false;
}
});
});
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
});
}
数据已成功发送到服务器。 这是我的其余代码:
@Path("/korisnici")
public class KorisnikServis {
@Context
HttpServletRequest request;
@Context
ServletContext ctx;
@POST
@Path("/registracija")
@Consumes({ MediaType.APPLICATION_JSON})
@Produces(MediaType.TEXT_PLAIN)
public String registracija(String data) {
return data;
}
}
对不起,这些类的名称不是英语。
现在我的问题是:如何解析发送的数据并使用它? 因为变量数据只是json格式的字符串。 我该如何提取不是来自客户端的电子邮件地址?
更新我添加了一些jar文件,并在表单中添加了action =“”。 但是现在我收到此错误:“ HTTP状态415-不支持的媒体类型”我正在使用apache tomcat 6
谢谢。
您可以使用以下命令从控制器servlet中的ajax请求获取数据
request.getParameter("emailAddress");
以上声明将为您提供在ajax请求中设置的电子邮件地址。
添加类以处理表单数据
public class FormData {
String korIme;
String lozinka;
String ime;
String prezime;
String uloga;
String telefon;
String email;
String slika;
public FormData() {
// TODO Auto-generated constructor stub
}
public String getKorIme() {
return korIme;
}
public void setKorIme(String korIme) {
this.korIme = korIme;
}
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;
}
}
更新您的网络服务
@POST
@Path("/registracija")
@Consumes({ MediaType.APPLICATION_JSON})
@Produces(MediaType.TEXT_PLAIN)
public String registracija(FormData data) {
data.email;/////this is email
return data;
}
您可能正在寻找@BeanParam,请看以下示例, https: //jersey.java.net/documentation/latest/user-guide.html#d0e2435
创建一个Java类(POJO),然后使用一个ObjectMapper(Jackson等-是的,这需要添加其他库)将json字符串转换为POJO实例/对象。
POJO
public class User {
public User(){
}
private String ime;
private String prezime;
private String lozinka;
//add other fields
public String getIme(){
return ime;
}
public void setIme(String ime){
this.ime = ime;
}
//other getters/setters
}
}
对象映射器
import org.codehaus.jackson.map.DeserializationConfig.Feature;
import org.codehaus.jackson.map.ObjectMapper;
public class JsonParser {
ObjectMapper objectMapper=new ObjectMapper();
public <T> T parseJson(String json,Class<T> targetType)throws Exception{
objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return objectMapper.readValue(json, targetType);
}
}
然后在您的服务器方法中
@POST
@Path("/registracija")
@Consumes({ MediaType.APPLICATION_JSON})
@Produces(MediaType.TEXT_PLAIN)
public String registracija(String data) {
JsonParser parser = new JsonParser();
User myUser = parser.parseJson(data, User.class);
//do whatever you want with myUser
return data;
}
请注意,如果您将JSON库添加到应用程序,则Jersey应该能够自动进行转换,这意味着您可以重写方法以读取
@POST
@Path("/registracija")
@Consumes({ MediaType.APPLICATION_JSON})
@Produces(MediaType.TEXT_PLAIN)
public String registracija(User data) {
....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.