(一)@Controller和@RestController的区别
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
1、如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
例如:本来应该到success.jsp页面的,则其显示success.
2、如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
3、如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
(二)SpringBoot搭建
1.pom添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.Controller类
@RestController
public class SpringBootController {
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String say() {
return "Hello World!";
}
}
3.启动类
@SpringBootApplication(scanBasePackages = "com.cmcc.study")
public class Test {
public static void main(String[] args) {
SpringApplication.run(Test.class, args);
}
}
4.测试【http://localhost:8080/index】
(三)SpringBoot mock单元测试
1、pom 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.单元测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestControllerTest {
private MockMvc mvc;
@Test
public void test() {
mvc = MockMvcBuilders.standaloneSetup(new TestController()).build();
try {
mvc.perform(MockMvcRequestBuilders.get("/index"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print()).andReturn();
} catch (Exception e) {
e.printStackTrace();
}
}
}
(四)SpringBoot和Swagger的继承
1.pom加入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
2.Swagger配置
@Configuration
@EnableSwagger2【注:必加该注解】
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
.apis(RequestHandlerSelectors.basePackage("com.cmcc.study"))
.paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo() {
return new ApiInfo("Spring Boot 测试使用 Swagger2 构建RESTful API", "", "1.0",
"http://localhost/", "木木", "", "");
}
}
3.Controller类
@RestController
@RequestMapping("/demo")
@Api(value = "测试Swagger2", description = "简单的Swaager页面接口编辑测试")
public class TestController {
@ApiOperation(value = "测试get请求", notes = "测试GET请求")
@RequestMapping(value = "/index", method = RequestMethod.GET)
String say() {
return "Hello World!";
}
@ApiOperation(value = "测试POST请求", notes = "根据User对象创建用户【POST】")
@RequestMapping(value = "/user/{id}/{nc}", method = RequestMethod.POST)
@ApiImplicitParams({
@ApiImplicitParam(dataType = "java.lang.Long", name = "编号", value = "id", required = true, paramType = "path"),
@ApiImplicitParam(dataType = "java.lang.String", name = "昵称", value = "nc", required = true, paramType = "path"),
@ApiImplicitParam(dataType = "java.lang.String", name = "年龄", value = "age", required = false, paramType = "body"),
@ApiImplicitParam(dataType = "User", name = "用户", value = "用户信息", required = true) })
@ApiResponses({
@ApiResponse(code = 500, message = "接口异常")
})
public User insert(@PathVariable Long id, @RequestBody User user) {
System.out.println("id:" + id + ", user:" + user);
return user;
}
}
4.启动类
@SpringBootApplication(scanBasePackages = "com.cmcc.study")
public class Test {
public static void main(String[] args) {
SpringApplication.run(Test.class, args);
}
}
5.测试【http://localhost:8080/swagger-ui.html】