Java 简单的AJAX JQuery示例给出了500个内部服务器错误
嗨,我在一个SpringMVC项目中工作,当我点击表单中的按钮时,我遇到了这个错误Java 简单的AJAX JQuery示例给出了500个内部服务器错误,java,jquery,ajax,spring,spring-security,Java,Jquery,Ajax,Spring,Spring Security,嗨,我在一个SpringMVC项目中工作,当我点击表单中的按钮时,我遇到了这个错误 500 (Internal Server Error) jquery.min.js:6 x.ajaxTransport.x.support.cors.e.crossDomain.send jquery.min.js:6 x.extend.ajax AddUser:19
500 (Internal Server Error) jquery.min.js:6
x.ajaxTransport.x.support.cors.e.crossDomain.send jquery.min.js:6
x.extend.ajax AddUser:19
doAjaxPost AddUser:41
onclick
我试图做一个简单的ajaxjquery示例,将用户添加到列表中,但当我在表单中按下add按钮时会出现错误
这是我的控制器类:
@Controller
public class UserListController {
private List<User> userList = new ArrayList<User>();
@RequestMapping(value="AddUser",method=RequestMethod.GET)
public String showForm(){
return "AddUser";
}
@RequestMapping(value="AddUser",method=RequestMethod.POST)
public @ResponseBody String addUser(@ModelAttribute(value="user") User user, BindingResult result )
{
String returnText;
if(!result.hasErrors())
{
userList.add(user);
returnText = "User has been added to the list. Total number of users are " + userList.size();
}
else
{
returnText = "Sorry, an error has occur. User has not been added to list.";
}
return returnText;
}
@RequestMapping(value="ShowUsers")
public String showUsers(ModelMap model)
{
model.addAttribute("Users", userList);
return "ShowUsers";
}
编辑:我启动一个新项目只是为了试图知道我有什么错误,我删除了我的应用程序中的SpringSecuirty,但我仍然可以找出错误
1) 实际上我并没有删除SpringSecurity,我只是启动了一个新项目来解决我的url问题
2) 我在ajax脚本中更改控制器和URL属性
新的RequestMapping控制器:
@RequestMapping(value="AddUser",method=RequestMethod.GET)
我删除了value=“AddUser”中的“/”
我的任何控制器中都没有“/”,如果在控制器中放置“/”,我会出现相同的500内部服务器错误这可能是因为在Java配置中默认启用了CSRF保护。在您的配置中尝试
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ...
.csrf().disable();
}
让我知道这是否有效
编辑**
要在AJAX请求中包含CSRF令牌,如果您使用的是JSON,则需要将其放在http头上。示例JSP示例通常是
<html>
<head>
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
</head>
然后在javascript调用中,获取此参数并将其添加到XMLHttpRequest的头中
希望这有帮助
我把它放在我的spring安全配置类
的末尾。和().csrf().disable()代码>我试过了,但它知道有一个404错误,这是个好消息。现在,您正在从Ajax发布带有“url:“views/AddUser”`的帖子。控制器映射在哪里?我只能在控制器中看到/AddUser。我用这个URL:AddUser
更新了ajax脚本,在控制器中我更新了控制器的映射,从value=“/AddUser”
到value=“AddUser”
现在它给了我500(内部服务器错误)
我相信它应该是/AddUser。现在,这是一个一般性错误,您必须查看它发布到的URL是什么,等等。但我相信您的主要问题已经解决。有点,但我不想禁用我的csrf tokken有没有其他方法可以做到这一点,而不必禁用csrf tokken
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ...
.csrf().disable();
}
<html>
<head>
<meta name="_csrf" content="${_csrf.token}"/>
<meta name="_csrf_header" content="${_csrf.headerName}"/>
</head>