Spring Boot 和 Rest 服务(不支持 405 方法)

Posted

技术标签:

【中文标题】Spring Boot 和 Rest 服务(不支持 405 方法)【英文标题】:Spring Boot and Rest Services (405 Method not Supported) 【发布时间】:2015-07-26 11:01:42 【问题描述】:

我创建了一个简单的 Spring Boot 应用程序并创建了一个 Rest Service,当我尝试访问它时出现错误

405 : Method Not Supported

不确定是什么问题。我检查了方法注释并指定了method=RequestMethod.POST,我正在提交一个带有post方法的表单。

这是我的代码。

@SpringBootApplication
public class SsFirstApplication 

    public static void main(String[] args) 
        SpringApplication.run(SsFirstApplication.class, args);

    

其他服务

@RestController
@RequestMapping("/api")
public class UserXAuthTokenController 

    @Inject
    private UserDetailsService userDetailsService;

    @RequestMapping(value = "/authenticate",
            method = RequestMethod.POST)

    public UserDetails authorize(@RequestParam String username, @RequestParam String password) 
        UserDetails details = this.userDetailsService.loadUserByUsername(username);
        return details ;
    

而且我的 index.html 页面非常基础。

<html>
    <body>
        <h3>Welcome</h3>
        <form action="/api/authenticate" method="post">
            <div>
                <div> 
                    <label>User Name : </label>
                    <input type="text" name="username"/>
                </div>
                <div> 
                    <label>Password : </label>
                    <input type="password" name="password"/>
                </div>  
                <div> 
                    <input type="submit" value="Submit"/>
                </div>
            </div>
        </form>
    </body>
</html>

这是控制台日志

2015-05-14 13:38:37.525  INFO 8124 --- [nio-9090-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2015-05-14 13:38:37.525  INFO 8124 --- [nio-9090-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2015-05-14 13:38:37.565  INFO 8124 --- [nio-9090-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 40 ms
2015-05-14 13:38:37.590  WARN 8124 --- [nio-9090-exec-1] o.s.web.servlet.PageNotFound             : Request method 'POST' not supported

不知道我做错了什么。感谢您的回复。

【问题讨论】:

您使用的是执行器吗? Actuator 为您提供了一个 /mappings 端点,可以帮助诊断问题。如果没有,请将其添加到您的 pom 中,然后在运行您的应用程序后转到您的 url/mappings,它应该显示它知道的所有映射。 org.springframework.bootspring-boot-starter-actuator 【参考方案1】:

我能够解决问题。我在主类中添加了以下注释 @EnableAutoConfiguration @ComponentScan。

现在我的主类看起来像这样。

@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan("com")
public class SsFirstApplication 
public static void main(String[] args) 
        SpringApplication.run(SsFirstApplication.class, args);

    

我认为这些是由@SpringBootApplication 自动添加的,但显然它们不是。谢谢

【讨论】:

它们是自动添加的,但默认情况下@ComponentScan 只查找与Application 类相同的包中的类。在这里查看cipley的答案***.com/questions/31318107/…

以上是关于Spring Boot 和 Rest 服务(不支持 405 方法)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot REST/JPA 服务中的不相等查询

Spring Boot REST 服务:JSON 反序列化不起作用

在 Spring Boot 中使用 FeignClient 进行同步 Rest API 调用

使用spring-boot对rest服务进行访问控制

如何在 Spring-boot 中不模拟服务类的情况下为 REST 控制器端点编写单元测试

Spring-Boot REST 服务基本 http 身份验证排除一个端点