这是我的更新用户方法:
@ResponseBody
@Transactional
@RequestMapping(value = "/profile/edit/{id}", method = RequestMethod.POST)
public String updateUser(@PathVariable("id") final Integer id, String firstname, String lastname, final RedirectAttributes redirectAttributes) {
respository.updateFirstname(id,firstname);
respository.updateLastname(id, lastname);
redirectAttributes.addFlashAttribute("message", "Successfully changed..");
return "redirect:/profile";
}
一切正常。也是数据库中的更新。但重定向只是一个字符串,不会更改路径。有人可以告诉我为什么吗?
答案 0 :(得分:4)
问题出在@ResponseBody
注释中。删除后,重定向应按预期工作。通过使用它,您可以覆盖Spring MVC的默认行为,并将返回值视为原始响应。
答案 1 :(得分:2)
@ResponseBody仍然可以进行重定向。
您可以通过以下方式执行此操作,这样您仍然可以在@ResponseBody(例如json)中传递预期数据,并且如果某些" usecase"强迫你重定向do重定向。同样如建议的那样,不要在控制器级别使用Transactional范围,而是在服务层上执行
@ResponseBody
@RequestMapping(value = "/profile/edit/{id}", method = RequestMethod.POST)
public String updateUser(@PathVariable("id") final Integer id, String firstname, String lastname, final RedirectAttributes redirectAttributes, HttpServletResponse response) {
respository.updateFirstname(id,firstname);
respository.updateLastname(id, lastname);
if(someCondition == "redirectMe"){
redirectAttributes.addFlashAttribute("message", "Successfully changed..");
response.sendRedirect("/profile");
}
return "some_data_for_view";
}
答案 2 :(得分:0)
@GetMapping("/abc/def")
public void some_method(HttpServletResponse response){
//to do
response.sendRedirect("url");
}