【问题标题】:How to read the data that's sent from ajax on rest server如何在休息服务器上读取从 ajax 发送的数据
【发布时间】:2017-01-15 00:22:55
【问题描述】:

我在尝试使用 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;
    }
}

抱歉课程名称不是英文。

现在我的问题是: 如何解析发送的数据并使用它?因为变量data只是一个json格式的字符串。我如何提取假设不是从客户端发送的电子邮件地址?

更新 我添加了一些 jar 文件,并将 action="" 添加到我的表单中。但现在我得到这个错误: “HTTP 状态 415 - 不支持的媒体类型”我正在使用 apache tomcat 6

谢谢。

【问题讨论】:

    标签: java jquery json ajax rest


    【解决方案1】:

    您可以使用以下命令从控制器 servlet 中的 ajax 请求中获取数据

    request.getParameter("emailAddress");

    上面的语句会给你在 ajax 请求中设置的电子邮件地址。

    【讨论】:

    • 我试过这个:String passEmail = request.getParameter("email");并且passedEmail 为空。
    • 这行不通,因为您没有发送 HTML 表单。
    • 它会起作用的。你能提供ajax调用代码吗?根据您的 ajax 调用,您没有在您提供的代码中初始化电子邮件
    • 现在尝试将任何硬编码值传递给 ajax 调用
    【解决方案2】:

    添加类来处理表单数据

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

    【讨论】:

    • 我试过你的方法,但没有。当再次调用 ajax 时,它会触发他的错误方法。
    【解决方案3】:

    你可能正在寻找@BeanParam,看看这个例子, https://jersey.java.net/documentation/latest/user-guide.html#d0e2435

    【讨论】:

      【解决方案4】:

      创建一个 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) {
      ....
      }
      

      【讨论】:

      • 感谢您的回答。但我知道它也应该像这样工作。我发现如果我删除字符串数据作为类 registracija 的参数,并像这样写:public String registracija() 而不仅仅是返回一些文本,我会从 ajax 获得成功,但是当我向类添加参数时从 ajax 获取错误。会不会是我没有正确发送数据到服务器?
      • 我不太确定,但也许您可以重写您的 ajax 以提交 HTML 表单,而不是发送变量(格式为 json)。你可以看看stackoverflow.com/questions/1960240/jquery-ajax-submit-form
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多