Javascript 如何使requestbody控制器工作?
所以实际上一切都很好,除了我不能访问“inscrit”这个应该是发送给用户的信息 这是我在javascript中的函数,它在ajax中取得了成功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"
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文件。那么这意味着唯一的区别是控制器,我尝试了你的方法,但仍然不起作用…是否需要一个版本?比如