HTTP put 方法导致 404
Posted
技术标签:
【中文标题】HTTP put 方法导致 404【英文标题】:HTTP put method causes 404 【发布时间】:2014-10-30 13:44:30 【问题描述】:我正在尝试将 REST 用于一些小操作。 Get 操作和 Post 操作工作正常,只有 PUT 操作给我问题。
我正在使用 2 个调度程序(一个映射到“/rest/”,一个映射到“/web/”,据我所知,我的配置文件是正确的(否则其他的也不行?)。
为了测试,我使用了一个名为 Postman 的 chrome 插件。
目前我只使用一个休息控制器:
@Controller
public class RestController
@Autowired
BlogPostServiceImp blogPostService;
@RequestMapping(value= "/getPosts", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public Collection<Post> getposts()
return blogPostService.getPosts();
@RequestMapping(value = "/post/uername/description/speciality/url", method = RequestMethod.PUT)
public void addPost(@PathVariable("username") String username,
@PathVariable("description") String description,
@PathVariable("speciality") String speciality,
@PathVariable("url") String url)
Post p = new Post(blogPostService.getId(), "2014", username, description, speciality, url);
blogPostService.addPost(p);
正如我之前所说,GET 请求有效,但 PUT 返回 404。
编辑:glassfish 的日志文件证实了这一点:
[2014-10-30T14:28:21.180+0100] [glassfish 4.1] [警告] [] [org.springframework.web.servlet.PageNotFound] [tid: _ThreadID=30 _ThreadName=http-listener-1( 1)] [timeMillis: 1414675701180] [levelValue: 900] [[ 在名称为“dispatcher2”的 DispatcherServlet 中找不到具有 URI [/MvcSpringBlogREST/rest/post] 的 HTTP 请求的映射]]
【问题讨论】:
你是怎么调用那个方法的?因为它不能在网页上运行,因为网络浏览器只做 GET/POST @Vld 我正在使用一个名为 Postman 的 chrome 插件来模拟调用。 在 Firefox 中使用 RESTClient 插件。如果它不起作用,您可以将您正在测试的请求网址发送给我吗?在这里输入 @ManilLiyanage chrome 插件应该可以正常工作。 localhost:8080/MvcSpringBlogREST/rest/post 那是我正在使用的网址,但它不起作用。 localhost:8080/MvcSpringBlogREST/rest/getPosts 这映射到 get 方法并且工作正常 @killernerd 请指定您的完整请求网址。使用您使用的值 【参考方案1】:尝试使用名为 Advanced Rest Client 的 chrome 插件(应用程序) chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo/RestClient.html
选择您将使用 Put 而不是 Get/Post
【讨论】:
那只是为了让你指定你想要做 PUT。邮递员虽然做同样的工作..您是否指定您想要应用程序/json响应?你必须设置你期望的响应..尝试在标题部分输入这个..接受:application/json 我做到了,有趣的是它在 put 请求上返回 404,但在 get 或 post 请求(到相同的 url)上返回 405(不支持方法)。去图... 405 是因为您已指定它必须是 PUT.. 您使用的是什么 uri/path.. 您是否添加了上下文 - 如果有的话?? 是的,我知道,但是当被视为帖子或 GET 时,完全相同的 url 返回 405 但设置为 PUT 时返回 404,这不是很奇怪吗?我希望 GET 和 POST 也会导致 404,而不是 405。405 表示它可以找到资源,但它根本不受支持。我正在通过邮递员插件添加标题日期,并将接受设置为“应用程序/json”。请参阅我上面的回复。 你有第一个 url (/MvcSpringBlogREST/rest/getPosts) 作为 GET,第二个 (/MvcSpringBlogREST/post/name/my_name/xx/xx) 作为 PUT。将第一个方法更改为 PUT 并在第二个 url 上使用正确的路径。第一个 url 不应该像您指定的那样工作...指定路径变量和 url 是必需的以上是关于HTTP put 方法导致 404的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 HttpClient 从 Web Api 调用 PUT 方法?
Laravel Put Route Giving 404 错误
对于未找到某些链接资源的 PUT 操作,HTTP 404 是不是是适当的响应? [关闭]