【发布时间】:2020-07-05 14:35:09
【问题描述】:
Hi,我正在使我的个人项目像“可教”一样。
我遇到了一个问题。
我想向服务器发送 PUT 请求并将服务器重定向到其他 url(GET 请求)。
- 请求“PUT /course/1/edit”
- 服务器处理一些逻辑并重定向到“GET /members/1/courses/manage”
但是,服务器没有工作。
Spring MVC 错误消息是Request method 'PUT' not supported。
Chrome 控制台错误是PUT http://localhost:8080/members/1/courses/manage 405
如果请求映射是 POST 并且 GET 不是 PUT,则返回重定向工作正常。
我只是想知道为什么 PUT 映射返回重定向请求重定向为 PUT 方法。
下面,Spring MVC 发现视图名称“redirect:/members/1/courses/manage” 并使用 PUT 方法重定向到“members/1/courses/manage”。至此,我不明白为什么spring mvc使用PUT方法来重定向了。
o.s.web.servlet.view.RedirectView : View name 'redirect:/members/1/courses/manage', model {}
o.s.web.servlet.DispatcherServlet : Completed 302 FOUND
o.s.web.servlet.DispatcherServlet : PUT "/members/1/courses/manage", parameters={}
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported]
o.s.web.servlet.DispatcherServlet : Completed 405 METHOD_NOT_ALLOWED
如果你知道任何文件可以帮助我解决这个问题,请推荐给我。
提前致谢!
前台代码
function courseEdit(courseUrl) {
let formDataArray = $("#course-edit-form").serializeArray();
let formDataObject = {};
for (const element of formDataArray) {
formDataObject[element.name] = element.value;
}
let courseEditFormDataJsonFormat = JSON.stringify(formDataObject);
$.ajax({
type: 'PUT',
url: courseUrl,
data: courseEditFormDataJsonFormat,
contentType: 'application/json'
}).done(function( data, textStatus, jqXHR ) {
});
}
回码
@PutMapping("/courses/{id}")
public String editCourse(@PathVariable Long id, @RequestBody CourseDto courseDto) {
CourseDto foundCourseDto = courseService.findById(id);
Long instructorId = foundCourseDto.getInstructor().getId();
// redirect:/members/1/courses/manage
return "redirect:/members/"+instructorId+"/courses/manage";
}
@GetMapping("/members/{id}/courses/manage")
public String courseDashboard(@PathVariable Long id, Model model) {
CoursesDto ownCourse = courseService.findOwnCourse(id);
model.addAttribute("coursesDto", ownCourse);
return "course/course_dashboard";
}
【问题讨论】:
-
在这个问题的答案中有几个可能的事情要检查:stackoverflow.com/questions/35381402/…
-
您没有显示有问题的 URL,但请注意 (1) 您似乎将 JSON 样式的 API 与页面加载 API 混合在一起,这种方式肯定会让您头疼(2) 课程资源的 URL 只是
/courses/{id},PUT 表示你要修改它而不需要edit。 -
@AlexWittig 感谢分享链接
-
@chrylis-onstrike- 谢谢,我更新了我的代码,没有使用
edit。我可以知道如何将 JSON 样式的 API 与页面加载 API 一起使用吗?在这个问题之前,有可能吗?
标签: java ajax spring spring-boot spring-mvc