记录工作学习点点滴滴,希望对大家有帮助
问题描述
之前使用windows的idea环境自动搭建springboot并没有出现问题,所以觉得很简单,转移的mac ox平台想着自己也搭建一下springboot的微服务,突然发现访问不到了,很是难受,也在百度中搜寻了很久,基本文章都是一样的,所以特意打算写一篇文章,总结一下各类问题。
1. 环境搭建
jdk 1.8
IntelliJ IDEA 2017.2.5
环境搭建的方式就不多介绍了,原谅我
2. SpringBoot快速搭建
这里简单介绍一下idea 的目录结构,好多情况下,刚刚从eclipse中转过来的朋友们总是被idea的目录结构搞的很难受,有的时候想要像eclipse那样创建一个workspace,在里面创建一些工程,那么在idea中我们怎么做呢?
首先我们要知道,在idea中的一个project就相当于是eclipse中的一个workspace,而每一个module就好像是一个project,所以我们采用如下方式创建springboot工程。
创建一个空的project 。 File->New->Project->左侧最下面的Empty Project->接着选择目录存储位置和project的名字就可以了。
在创建好的空的project中创建新的module。File->New->Module->Spring Initializr->采用默认配置 直接next->继续采用默认next->接着将web项打勾->接着就是给springboot项目起名字,并设置该项目的存放位置,路径要放在空的project下。
ok!其实到目前为止,正常情况下我们入门springboot已经搭建好了,只需执行springboot 的入口就可以。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
控制台输出如下则证明启动成功:
2017-11-09 14:58:47.432 INFO 10039 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-11-09 14:58:47.437 INFO 10039 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 1.978 seconds (JVM running for 2.542)
这个表示springboot内置的tomcat已经启动成功,并且端口在8080,这个时候可能有同学已经按耐不住,就会去访问:http://localhost:8080.
3.问题分析-localhost:8080的404错误
当然结果可能会是如下信息:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Nov 09 16:09:12 CST 2017
There was an unexpected error (type=Not Found, status=404).
No message available
当时我也被这个问题困扰了好久, 看到了一篇文章专门介绍这个,大概意思是再说我们的tomcat启动了,但是并不存在tomcat的主页面,所以要想在springboot启动的tomcat中看到tomcat的页面,需要进行配置。
3.问题分析-localhost:8080/hello的404错误
当然我们的目的并不是访问tomcat的主页,接着我们编写一个controller来访问一下。
注意这里在创建controller的时候要注意一下规则,我们的controller要位于程序main 方法的包或其子包下,不然springboot是扫描不到我们的controller的。
例如:
com.example.demo.Application.java
com.example.demo.controller.HelloController.java
...
使用类似上面的包结构。
Controller代码如下:
@RestController
public class HelloController {
@RequestMapping("/hello")
public String helloTest(){
return "Hello World!";
}
}
重新运行一下程序,网址访问http://localhost:8080/hello 后就会看到Hello World!信息了。
有人说404问题呢?如果你不小心把类上面的@RestController写成了@Controller,那么你再去访问,结果就是404没跑了。
@RestControllera :convenience annotation that does nothing more than adding the@Controller and @ResponseBody annotations。 @RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作
@Controller: 标识一个Spring类是Spring MVC controller处理器
共同点:都来表示Spring某个类的是否可以接收HTTP请求
最后的我的解决方案就是:
将Controller类上面的注解@Controller改写成@RestController。