我有一个网站,您可以通过它创建捆绑包并向其中添加自定义或预定义的任务。
一切正常,我可以随时更改所有这些字段。一旦所有这些字段都适合您,您必须单击“保存”按钮。单击它后,将通过多种方法来验证字段。如果所有字段均已成功验证,则Ajax将发布请求发送到我的Spring控制器,该控制器然后将所有内容存储到数据库中。之后,我想将用户重定向到显示所有现有捆绑软件的页面。
我已经尝试这样做:
@RequestMapping(value = "/bundle", method = RequestMethod.POST, consumes = {"application/octet-stream", "multipart/form-data"})
public void bundle(MultipartHttpServletRequest request,
HttpServletResponse response) throws IOException {
// Code to store bundles to a database.
// Redirect
response.setHeader("Location", "http://localhost:8080/bundles");
response.setStatus(302); //302 Found
// I have also tried to replace above two statements with this
response.sendRedirect("http://localhost:8080/bundles");
}
上面的代码确实执行,并且请求被发送到/ bundles
但是我似乎停留在初始页面上,没有进行重定向。
答案 0 :(得分:1)
我和你有同样的问题。我通过使用Angular在前端中重定向来解决了这个问题。
您可以在javascript中使用HTTP请求中的答案,然后从那里重定向。
我的服务器端代码:
@PostMapping(AdminToolConstants.MAPPING_CHECK_USER)
public ResponseEntity checkUser(HttpServletResponse response, @RequestBody UserDto userDto) throws IOException{
if (userService.checkUser(userDto)) {
return new ResponseEntity(HttpStatus.OK);
} else {
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
}
客户端javascript:
angular.module('admintool.services', []).factory('UserService', ["$http", "CONSTANTS", function($http, CONSTANTS) {
var service = {};
service.checkUser = function (userDto) {
return $http.post(CONSTANTS.checkUser, userDto).then(function (value) {
window.location.href = "/";
}).catch(function (reason) { window.location.href = "/register" });
};
return service;
}]);
例如,登录成功时,在.then
内部重定向用户,如果登录失败,则在.catch
内部重定向用户。