Javascript 如何使requestbody控制器工作?

Javascript 如何使requestbody控制器工作?,javascript,java,ajax,database,spring,Javascript,Java,Ajax,Database,Spring,所以实际上一切都很好,除了我不能访问“inscrit”这个应该是发送给用户的信息 这是我在javascript中的函数,它在ajax中取得了成功 function fbLogin() { FB.login(function (response) { if (response.authResponse) { var inscrit = { "prenom"

所以实际上一切都很好,除了我不能访问“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()”总是空的)

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

因此,我想知道是否有人能帮助我理解为什么它不能在我的控制器中工作(如何做到这一点,数据正确地从ajax发送到控制器):( 谢谢


编辑:我确实在下面写了这个问题的答案。问题是response.first_name实际上是空的…并且必须通过函数userdata()传递它有真实的信息。这意味着我的代码中没有任何真实的错误,控制器和jsp页面之间的所有信息都正常工作。可以免费使用它作为示例说明如何工作。这是我的控制器类。这只是记录发送到服务器的post请求:(如果需要添加响应正文之类的内容,可以修改此选项)

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

我从高级Rest客户端发出post请求,并将负载设置为

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

}
结果是

qwer
qewrwe
agdfae@gmail.com
您可以根据自己的需要对此进行修改。希望这对您有所帮助

编辑:

spring boot中还需要两个以上的类,如下所示:

servletilizer.java

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


    }
public class ServletInitializer extends SpringBootServletInitializer {

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

}
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PostDataApplication {

    public static void main(String[] args) {
        SpringApplication.run(PostDataApplication.class, args);
    }
}
PostDataApplication.java

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


    }
public class ServletInitializer extends SpringBootServletInitializer {

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

}
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PostDataApplication {

    public static void main(String[] args) {
        SpringApplication.run(PostDataApplication.class, args);
    }
}
PostDataApplication是应用程序的名称

这四个类就可以了(仅使用pom.xml,因为这是springboot,所以不需要其他xml配置)

@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的类是非标准的。您应该将其更改为inscritjava


我希望这会有所帮助。

我会回答我自己的问题,因为我找到了答案,所以这是为那些试图拥有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');}
                    });
                });
        }
函数fbLogin(){
FB.登录(功能(响应){
if(response.authResponse){
//获取并显示用户配置文件数据
getFbUserData();
}否则{
document.getElementById('status')。innerHTML='User已取消登录或未完全授权';
}
},{范围:'电子邮件'});
}
//从facebook获取用户配置文件数据
函数getFbUserData(){
api('/me',{locale:'en_US',字段:'id,first_name,last_name,email,link,gender,locale,picture'},
功能(响应){
/*document.getElementById('fbLink').setAttribute(“onclick”,“fbLogout()”);
document.getElementById('fbLink')。innerHTML='Logout from Facebook';
document.getElementById('status').innerHTML='感谢您登录,'+response.first_name+'!';
document.getElementById('userData').innerHTML='FB ID:'+response.ID+'

Name:'+response.first+'+response.last+'

Email:'+response.Email+'

Gender:'+response.Gender+'

Locale:'+response.Locale+'*/ var inscrit={ “prenom”:响应。名字, “nom”:response.last_name, “密码”:“1234”, “状态”:0, “email”:response.email } $.ajax({ 方法:“post”, url:“/hello/facebookconnection”, contentType:'application/json;charset=utf-8', 数据:JSON.stringify(inscrit), 数据类型:“json”, 成功:函数(){ document.location.href=“AccueImber”; }, 错误:函数(){ alert('Error in sending ajax data');} }); }); }
作为一般提示,Java中的类应该以大写字母开头。如果您使用Spring,这实际上可能是问题的一部分,我记得如果您没有正确使用camelCase,注释会做一些奇怪的事情。尝试将其更改为
Inscrit
,不会有什么坏处。
(无论我做什么,“Inscrit.getEmail()”总是空的)
您是否检查过FB.login的回复中是否确实存在电子邮件?(
response.email
)嗯..我也想到了,但在这个项目中,我的朋友让它使用小写的inscrit,他使用它在网站上创建一个帐户,然后连接它没有问题。所以铭文和连接工作正常。但是因为这个是通过facebook连接的,我必须通过ajax,他没有。是的,我通过了,电子邮件正确显示响应。Email所以我的情况更像是我知道所有信息都是正确的,但我不知道为什么“@RequestBody inscrit inscrit”不起作用。我可能错过了一些愚蠢的事情,但在互联网上看了几个小时后,我没有看到任何错误……:(JSON.parseObject不识别xD我该怎么做?下载jar文件。那么这意味着唯一的区别是控制器,我尝试了你的方法,但仍然不起作用…是否需要一个版本?比如