近日问题整理(week001)
1、启动一个简单的springboot项目,简单的http://localhost:8080/hello一直报错返回不了正确的
Hello World?
代码如下
最终发现HelloController需要和Application在同一个package下才能正常的加载进去,所以这种只有@SpringBootApplication的配置下,加载扫描的范围,只在自己的package下,所以关于应用加载的bean范围,这个需要注意
经过验证发现,不仅仅是放在同一个package下可以,Application放在外层,com.example,controller放在com.example.controller也是生效的,所以默认扫描的package目录就是com.example.*下的bean。
2、即使放在同一个package下,contoller也会报错not fund,而restController可以显示到界面上,所以二者的区别是什么?
查看restController的注解配置,需要注意的是多了一个@ResponseBody,是一个加强版的controller。@ResponseBody 注解的作用是将Controller的方法返回的对象,通过转换器转换为指定的格式之后,写入到 Response 对象的 body 区,常用来返回 JSON 数据或 XML 数据 。在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过 Response 对象输出指定格式的数据 。所以只有使用了@ResponseBody才会直接把Hello World~直接返回到浏览器客户端。
3、测试项目启动报错 Field stuMapper in org.example.service.impl.StuServiceImpl required a bean of type 'org.example.mapper.StuMapper' that could not be found.
这个需要了解mybatis的一些基本原理,mapper的接口,通过namespace配置在xml中,通过注解@Mapper,mybaits才会去将mapper接口生成对应的代理文件,交给spring去管理,而@MapperScan配置与启动的applicaiton上,就会自动装配整个包下的接口,生成对应的代理对象
4、关于restful的含义是什么?
restful是一个api的接口规范。url上尽量不使用动词,在restful规范中,每一url代表一个资源,比如 /student 这种路径,通过不同的请求类型,对应不同的操作,url是一样的,get 代表查询,post代表新增,put代表更新,delete代表删除。。等等;当然目前的api严格规范的api定义,会增加一个接口的沟通成本,因为你无法通过字面的意思去清楚知道这个url的具体的功能,还需要知道对应的请求类型,增加了沟通成本,所以一般还是会通过url的字面意思关联功能