javascript - Spring Web 应用程序在 PUT 调用上返回 405 错误
问题描述
我有一个 Java Spring Web 应用程序,它创建了一个可以分配给用户的角色列表。但是,我在创建新角色时遇到问题,该角色是通过返回 405 错误的 AJAX PUT 调用调用的。该应用程序在 Java 8 和 Spring 5.1.1 上运行。
我试过调试前端和后端。我发现,调用成功到达后端,处理调用并返回。但是,前端会声称发生了错误并返回 405 错误。但问题是,该错误没有提供任何关于究竟是什么失败的细节。我能找到的最多信息是这条消息:
TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
at Function.invokeGetter (<anonymous>:2:14)
at Object.error (http://localhost:8000/xxx/admin-user-search.html:1011:10)
at fire (http://localhost:8000/xxxx/webjars/jquery/3.1.1/jquery.js:3305:31)
at Object.fireWith [as rejectWith] (http://localhost:8000/xxxx/webjars/jquery/3.1.1/jquery.js:3435:7)
at done (http://localhost:8000/xxxx/webjars/jquery/3.1.1/jquery.js:9244:14)
at XMLHttpRequest.<anonymous> (http://localhost:8000/xxxx/webjars/jquery/3.1.1/jquery.js:9484:9)
Javascript:
function submitCreateNewRole(){
isBlank = false;
var myData;
newRoleName = $('#modalUserRoleSearchText').val();
newRoleDescription = $('#modelUserRoleDescText').val();
if (newRoleName=='' || newRoleDescription==''){
isBlank = true;
}
if (isBlank){
appAPI.setErrorBannerRole("Blank data is not allowed. Please enter non-blank data to create new Role.");
} else {
var UserRoleSearchModel = {};
var userRoleAction = "createNewUserRole" ;
RoleModel.ldapName = newRoleName;
RoleModel.roleDesc = newRoleDescription;
var token = $("meta[name='_csrf']").attr("content");
var URL = "json/admin-user-search?userRoleAction=" + userRoleAction + "&roleName=" + newRoleName + "&roleDesc=" + newRoleDescription;
var req = JSON.stringify(RoleModel);
var jqxhr = $.ajax({
type: "PUT",
url: URL,
headers: { "X-CSRF-TOKEN" : token },
data: req,
contentType: "application/json",
error: function (xhr, status, error) {
console.log("Failure caught");
console.log(xhr.responseText);
},
success: function(data){
myData = data;
}
}).done(function( msg ) {
$('#alertMessageSuccess').val('Successfully create new row');
}).fail(function(jqxhr) {
$('#alertMessageError').val('failed to create role' + newRoleName);
});
}
return myData;
}
爪哇弹簧:
@RequestMapping(value = {
"admin-user-search"
}, method = RequestMethod.PUT)
public ModelAndView createNewUserRole(@AuthenticationPrincipal Principal principal,
@RequestParam(required = false) String pageCommand,
@ModelAttribute("UserModel") UserModel userSearch,
@ModelAttribute("RoleModel") RoleModel userRoleSearch,
@RequestParam(value = "roleName", required = false) String roleName,
@RequestParam(value = "roleDesc", required = false) String roleDesc,
@RequestParam(value = "userRoleAction", required = false) String userRoleCommmand, HttpServletRequest request) {
Results results = null;
List<Role> roleVOs = null;
String roleResponseMessage;
ModelAndView rView = new ModelAndView("admin-user-search");
if ("createNewUserRole".equals(userRoleCommmand)) {
userRoleSearch.clearAlertMessages();
userSearch.clearAlertMessage();
if ("".equals(roleName)) {
roleResponseMessage = "Unable to create a new role due to invalid or blank LDAP username enterred. Please try again with valid LDAP username.";
userRoleSearch.setErrorMessages(roleResponseMessage);
} else if ("".equals(roleDesc)) {
roleResponseMessage = "Unable to create a new role due to invalid or blank Role Description entered.";
userRoleSearch.setErrorMessages(roleResponseMessage);
} else {
try {
this.tdmcRoleDao.addNewRole(roleName, roleDesc);
roleResponseMessage = String.format("New user role '%s' has been added.", userRoleSearch.getLdapDn());
userRoleSearch.setSuccessMessages(roleResponseMessage);
userSearch.setSuccessMessages(roleResponseMessage);
roleVOs = retrieveAllRoles();
} catch (final SQLException e) {
LOGGER.error(e, TDMCMessages.TDMC_0142_DATABASE_INSERT_EXCEPTION, "tdmcRoleDao.addNewRole(newRoleLdap)");
roleResponseMessage = "Unable to create a new role -'%s' due to DB problem. Please retry with a new valid role name.";
userRoleSearch.setErrorMessages(roleResponseMessage);
userSearch.setErrorMessages(roleResponseMessage);
} catch (final DuplicateKeyException dupEx) {
roleResponseMessage = "Unable to create a duplicate role'. Please retry with non-duplicated role name.";
userRoleSearch.setErrorMessages(roleResponseMessage);
userSearch.setErrorMessages(roleResponseMessage);
}
if (roleVOs != null && !roleVOs.isEmpty()) {
results = populateRolesToResults(roleVOs);
}
userRoleSearch.setResults(results);
userRoleSearch.setSelected(roleVOs);
rView.addObject("RoleModel", userRoleSearch);
}
}
return rView;
}
当我运行应用程序并尝试创建新角色时,我看到 PUT 调用到达 Java 服务器并成功返回视图。但是,在 Web 客户端,它会抛出 405 错误,并且不清楚究竟是什么失败了。任何见解都会非常有帮助。
另一方面,该应用程序也进行 POST 和 GET 调用,但这些似乎工作正常,所以我不明白为什么在这种情况下 PUT 调用失败。
编辑:修复代码
解决方案
首先,您的网址似乎是错误的,请检查。并更改为发布映射,然后通过正文发布,例如@requesrbody
推荐阅读
- php - htmlspecialchars 不接受“变量”作为参数
- r - 无法在 R 3.5.2 中安装 corrr 包
- vba - 如何在不可见的情况下使用 Foxit Phantom PDF
- python - 如何循环并将我的代码附加到 CSV 文件?- Python
- javascript - 我怎样才能通过'e || 事件 || 事件'到嵌套函数
- xamarin - Font Awesome 仅在 xamarin 上显示 ASCII 字符
- javascript - CKEditor5,如何在我的 javascript 函数中编写 Blur 事件处理程序
- gitlab - 如何向 Gitlab 中计划作业状态的特定人员(订阅者)发送电子邮件?
- python - 当有人对其做出反应时编辑消息不起作用
- javascript - 尝试在弹出框内显示按钮元素,但未出现