spring boot demo 搭建
项目搭建
- 创建pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 创建入口类
@SpringBootApplication
@RestController
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
@RequestMapping("/")
@ResponseBody
public String hello(){
return "hello world";
}
}
建立Application.java类,Sprin Boot推荐这个类是放在项目代码根目录下的。
Application.java类是一个有main方法的java类,通过运行这个类就可以启动我们的项目了(spring boot的spring-boot-start-web模块内嵌了tomcat容器)。
解释:入口类之中出现的4个注解名词 :@SpringBootApplication这个注解是为了方便我们启动spring-boot应用 spring-boot再次封装的注解,里面包含了其他的注解在一起(@SpringBootApplication注解等价于以默认属性使用@Configuration,@EnableAutoConfiguration和@ComponentScan),详细可以参考如下文章: http://www.jianshu.com/p/ed141c5f906d
@RestController这里使用RestController对这个controller类进行注解,RestController是一个混合注解,混合了@Controller和@ResponseBody,因此整个类会被认为是一个控制器类,并且会直接将对应方法的内容返回给页面。@RequestMapping("/")使用@RequestMapping来进行url和方法的绑定。其中value指定了要绑定的URL。这里value的值填写为“/”说明对整个网站的根路径“/”进行绑定。@ResponseBody表示返回的是字符串内容渲染在页面之中
单元测试
- 创建一个UserController
@Api(value = "用户相关接口")
@RestController
@RequestMapping(value = "/users")
public class UserController {
static Map<Long ,User> users = Collections.synchronizedMap(new HashMap<Long ,User>());
@ApiOperation(value = "获取用户列表", notes = "")
@RequestMapping(value = "/", method = RequestMethod.GET)
public List<User> getUserList(){
List<User> r = new ArrayList<User>(users.values());
return r;
}
@ApiOperation(value = "创建用户", notes = "根据user对象创建用户")
@PostMapping(value = "/")
public String postUser(@ModelAttribute User user){
users.put(user.getAge(), user);
return "success";
}
@ApiOperation(value = "获取用户详细信息", notes = "根据的id来获取用户详细信息")
@GetMapping(value = "/{id}")
public User getUser(@PathVariable long id){
return users.get(id);
}
@ApiOperation(value = "更新用户详细信息", notes = "根据的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
@PutMapping(value = "/{id}")
public String putUser(@PathVariable long id, @ModelAttribute User user){
User u = users.get(id);
u.setAge(user.getAge());
u.setName(user.getName());
users.put(id, u);
return "success";
}
}
这个里面出现了@GetMapping @PutMapping和@PostMapping 是为了@RequestMapping里面的对应method方法的简写
在pom中加入test的依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
创建测试类
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MockServletContext.class)
@SpringBootTest
public class ApplicationTest {
private MockMvc mvc;
@Before
public void setUp() throws Exception{
mvc = MockMvcBuilders.standaloneSetup(new UserController()).build();
}
@Test
public void getHello() throws Exception{
mvc.perform(MockMvcRequestBuilders.post("/users/")
.param("age","12")
.param("name", "zhang")
.accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().string(equalTo("success")));
}
}
swagger2
- pom依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
- 新建配置类
@configuration 表示这个是配置类
@EnableSwagger2表示开启这个类
可以把这个配置类和Application放在一起
- 在controller中注解对应的api
@ApiOperation(value = "创建用户", notes = "根据user对象创建用户")
@PostMapping(value = "/")
public String postUser(@ModelAttribute User user){
users.put(user.getAge(), user);
return "success";
}
value 表示在ui界面中出现的title文字
Notes 表示在改方法详情页面之中出现的提示;
可视化界面: