调用REST接口时出现“No message available”错误求助
先看你遇到的核心问题:虽然在WebSecurity里给/createorganization配置了permitAll(),但还是返回404,这大概率不是权限配置的问题,而是接口本身无法被Spring MVC正确映射,我帮你梳理几个关键排查点:
1. 修复API方法签名的语法错误
你的createOrganization方法参数里有明显的语法错误:
public @ResponseBody CustomResponse createOrganization(String orgName, String, String email, String password) throws Exception {....
这里的String, String email是无效语法——多了一个多余的String,,这会导致Spring无法识别这个合法的请求处理方法,自然返回404。把它修正为:
public @ResponseBody CustomResponse createOrganization(String orgName, String email, String password) throws Exception {....
2. 检查控制器类的路径前缀
如果你的控制器类上添加了@RequestMapping注解(比如@RequestMapping("/api")),那实际的API路径会是/api/createorganization,而不是你访问的根路径/createorganization。你需要确认控制器类的注解:
// 示例:如果有这样的前缀,访问路径要加上/api @RestController @RequestMapping("/api") public class YourController { @GetMapping(path = "/createorganization") public @ResponseBody CustomResponse createOrganization(...) {....} }
这种情况下,你需要访问http://localhost:8080/api/createorganization?orgName=abcd&email=john@gmail.com&password=complex才能命中接口。
3. 确认Spring Boot扫描到了控制器类
如果你的控制器类不在Spring Boot主应用类的同级或下级包下,Spring会无法自动扫描到这个控制器,导致接口无法映射。你可以:
- 把控制器类移到主应用类的包或子包下
- 或者在主应用类上添加
@ComponentScan指定控制器所在的包:
@SpringBootApplication @ComponentScan(basePackages = {"com.your.package.controller"}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
4. 验证WebSecurity配置的正确性
虽然权限配置大概率不是404的原因,但可以再确认一下:你的antMatchers("/createorganization").permitAll()是正确的,它会允许这个路径的所有请求绕过认证。不过要注意,如果你的请求是POST方法,但接口定义的是@GetMapping,也会返回404——但你用的是GET请求,所以这个点可以排除。
先优先修复第一个语法错误,这是最明显的问题,之后再依次排查其他点,应该就能解决404的问题了。
内容的提问来源于stack exchange,提问作者Andy




