如何使请求体控制器工作?

时间:2017-06-07 21:01:01

标签: javascript java ajax database spring

所以实际上一切都运行良好,除了我无法访问“inscrit”这个被认为是发送给信息用户的那个

这是我在javascript中的功能,它确实为ajax取得了成功。

function fbLogin() {
            FB.login(function (response) {
                if (response.authResponse) {
                    var inscrit = {
                        "prenom": response.first_name,
                        "nom": response.last_name,
                        "email": response.email
                    }
                    $.ajax({
                        method: 'post',
                        url: '/hello/facebookconnection',
                        contentType : 'application/json; charset=utf-8',
                        data: JSON.stringify(inscrit),
                        datatype: "json",
                        success: function() {
                        window.alert('User data sent');}
                        ,
                        error: function(){
                            window.alert('Error in sending ajax data');}
                    });
                } else {
                    document.getElementById('status').innerHTML = 'User cancelled login or did not fully authorize.';
                }
            }, {scope: 'email'});
        }

这是我的java控制器(不管我做什么,“inscrit.getEmail()”总是为null)

@RequestMapping(value = "/facebookconnection", method = RequestMethod.POST)
@ResponseBody public void createUser(@RequestBody inscrit inscrit, ModelMap model) throws Exception {
    //System.out.println(inscrit.getNom());
    //System.out.println(inscrit.getPrenom());
    System.out.println(inscrit.getEmail());
    try {
        user.adduser(inscrit);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这是我的inscrit类,正确设置了所有getter和setter(我知道它没有问题)

@Entity
@Table(name="inscrit")
public class inscrit implements Serializable {
  @Id
  @Column(name="email")
  private String email;

  @Column(name="nom")
  private String nom;

  @Column(name="prenom")
  private String prenom;
}

所以我想知道是否有人可以帮助我理解为什么它不能在我的控制器中工作(如何将数据从ajax正确发送到控制器):( 谢谢!

编辑:我确实在下面写了这个问题的答案。问题是response.first_name实际上是空白的......并且必须通过具有真实信息的函数userdata()。这意味着我的代码中没有任何实际错误,控制器和我的jsp页面之间的所有信息都能正常工作。可以自由地使用它作为其工作原理的一个例子

3 个答案:

答案 0 :(得分:0)

这是我的控制器类。这只是将发送请求发送到服务器:(如果您需要更多类似添加响应主体的内容,可以修改此内容)

hour * 3600 + minute * 60 + second

这是我的 inscrit.java 类(我个人认为命名该类不会影响但更好地遵循标准命名实践,例如 Inscrit.java

@RestController
public class EmailController {      
    @RequestMapping(value = "/facebookconnection", method = RequestMethod.POST)
     public void createUser(@RequestBody inscrit inscrit) throws Exception {
        System.out.println(inscrit.getNom());
        System.out.println(inscrit.getPrenom());
        System.out.println(inscrit.getEmail());



    }

我从Advanced Rest Client发出了一个帖子请求,并将有效负载设置为

import java.io.Serializable;

public class inscrit implements Serializable {
    private static final long serialVersionUID = -8445943548965154778L;

       private String email;

       private String prenom;

       private String nom;

       public inscrit() {
            super();
        }

        public inscrit(String email,String prenom,String nom) {
            this.setEmail(email);
            this.setPrenom(prenom);
            this.setNom(nom);

        }
       public String getEmail() {
        return email;
    }


    public void setEmail(String email) {
        this.email = email;
    }


    public String getNom() {
        return nom;
    }


    public void setNom(String nom) {
        this.nom = nom;
    }


    public String getPrenom() {
        return prenom;
    }


    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }


    }

结果

{
 "email":"agdfae@gmail.com",
 "prenom":"qewrwe",
 "nom":"qwer"

}

您可以根据自己的需要进行修改。希望这有帮助

修改

你需要在春季启动时增加两个类,如下所示:

<强> ServletInitializer.java

qwer
qewrwe
agdfae@gmail.com

PostDataApplication .java

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(PostDataApplication.class);
    }

}

PostDataApplication是应用程序的名称。

这四个类可以解决问题(使用pom.xml只需要其他xml配置,因为这是springboot)。让我知道你是否有任何问题。

答案 1 :(得分:0)

@ResponseBody public void createUser(@RequestParam(value="inscrit") String inscrit) throws Exception {
//System.out.println(inscrit.getNom());
//System.out.println(inscrit.getPrenom());

Inscrit ins = JSON.parseObject(inscrit, Inscrit.class);
System.out.println(ins.getEmail());    
try {
    user.adduser(ins);
} catch (Exception e) {
    e.printStackTrace();
}  }

inscrit.java 的类是非标准的。您应该将其更改为 Inscrit java

我希望这会有所帮助。

答案 2 :(得分:0)

我会回答我自己的问题,因为我找到了答案,所以这适用于那些试图拥有facebook api并想要获取profil信息的人进入数据库。 我的错误是我认为登录中的响应与UserData()相同,但事实并非如此......所以我应该这样做。

        function fbLogin() {
            FB.login(function (response) {
                if (response.authResponse) {
                    // Get and display the user profile data
                    getFbUserData();
                } else {
                    document.getElementById('status').innerHTML = 'User cancelled login or did not fully authorize.';
                }
            }, {scope: 'email'});
        }

        // Fetch the user profile data from facebook
        function getFbUserData(){
            FB.api('/me', {locale: 'en_US', fields: 'id,first_name,last_name,email,link,gender,locale,picture'},
                function (response) {
                    /*document.getElementById('fbLink').setAttribute("onclick","fbLogout()");
                    document.getElementById('fbLink').innerHTML = 'Logout from Facebook';
                    document.getElementById('status').innerHTML = 'Thanks for logging in, ' + response.first_name + '!';
                    document.getElementById('userData').innerHTML = '<div class="fbprofile"><p><b>FB ID:</b> '+response.id+'</p><p><b>Name:</b> '+response.first_name+' '+response.last_name+'</p><p><b>Email:</b> '+response.email+'</p><p><b>Gender:</b> '+response.gender+'</p><p><b>Locale:</b> '+response.locale+'</p></div><p><b>Picture:</b> <img src="'+response.picture.data.url+'"/></p>';*/
                    var inscrit = {
                        "prenom": response.first_name,
                        "nom": response.last_name,
                        "password": "1234",
                        "status": 0,
                        "email": response.email
                    }
                    $.ajax({
                        method: 'post',
                        url: '/hello/facebookconnection',
                        contentType : 'application/json; charset=utf-8',
                        data: JSON.stringify(inscrit),
                        datatype: "json",
                        success: function() {
                            document.location.href = "accueilmember";
                        },
                        error: function(){
                            window.alert('Error in sending ajax data');}
                    });
                });
        }