【问题标题】:HTTP put method causes 404HTTP put 方法导致 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 请指定您的完整请求网址。使用您使用的值

标签: spring rest


【解决方案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 是必需的
猜你喜欢
  • 2014-07-12
  • 2016-08-12
  • 2018-07-15
  • 2019-10-30
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
相关资源
最近更新 更多