[初学Spring Boot](1):打不开localhost:8080/hello

报如上错误;显示应用程序没有显式映射,也就是说,你的Controller(指示Spring某个类是否能够接收HTTP请求),没有映射到启动函数上。

解决办法:

 

在src/main/java/test/TestApplication.class中,为注解@SpringBootApplication加上参数,如图,是我创建Controller时的文件路径名称。而后,重启Spring Boot项目,Over。 

注:浏览器地址栏输入:localhost:8080/hello

不要前缀,http://localhost:8080/hello

另,8080端口可修改。 

延伸:

深层原因:

首先,我了解到,@SpringBootApplication会扫描当前包及其子包,如果报上述错误,意味着,我们的Controller既不在当前包下,也不属于子包。确实如此。

1、

可看到,我的controller是注解@SpringBootApplication所在包test 的邻居,所以不在当前包。

2、

我的 controller用的注解是@RestController。经查,@SpringBootApplication注解的子包包括@Controller,@Service,@Component,@Configuration和@Bean注解等。是故,我的controller注解也不是子包注解。

因而,@SpringBootApplication注解并不知道我的controller的存在。故而,我的controller类等于没写。

所以,需要给@SpringBootApplication指条路。

我们查看@SpringBootApplication源码,

@AliasFor(
annotation=ComponentScan.class,
attribute="basePackages"
)
String[] scanBasePackages() default{};

@AliasFor(
annotation=ComponentSacn.class,
sttribute="basepackageClasses"
)
Class<?>[] scanBasePackageClasses() default{};

根据命名,我们可以猜到,这就是两种指路方法,一种指到你家,扫描你家里所有人,另一种经过你家指到你这个人,即class类。显然,我们根据需要进行选择。两种的区别,显然的。

因而,我们选择两种方法的解决方式,为:

package com.wfy.test

//import com.wfy.controller.HelloController;
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootapplication

//@SpringBootApplication(scanBasePackages="com.wfy.controller")
@SpringBootApplication(sacnBasePackageClasses=com.wfy.controller.HelloController.class)
//@SpringBootApplication(scanBasePackageClassees=HelloController.class)
//@SpringBootApplication
public class TestApplication{
public static void main(String[] args){
Springapplication.run(TestApplication.class,args);
}
}

注意,指到你这个人的时候,你可以在参数里写完整的地址,也可以import一下你的地址,在参数里只写名加.class即可。具体看图。(没有双引号)

So,只要我在@SpringBootApplication所在包下创建我的MyController,就不需要指路。无论是用@Controller @ReponseBody,或者@RequstController,都可以扫描到。

 

 

 端口号不是8080啊。当然可以改了。

看路径,resources下,application.properties文件,加代码

 

OK,目前,我有两个在不同位置的controller,我想运行他俩,结果

 

想着多注解吧,报错。想想也知道重复了,还是想试一下。

搜了一下,原来路径可以多写。再细看源码,原来是一个字符数据啊。 

String[] scanBasePackages() default{};

 Over。多说无益。下次再聊。

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值