SpringSecurity-one(项目搭建)

SpringSecurity-one(项目搭建)

Scroll Down

今天的学习并未涉及到SpringSecurity,只是完成项目环境的搭建。中间一些小的比较实用的知识点,我会单独整理出来。项目放在GitHub上了,地址:

GitHub仓库地址

1. 创建整个项目结构,如图

image.png

  • 创建一个父工程study-security,主要是导入项目整体需要的依赖和对导入的依赖进行版本的管理,父项目的pom导入的依赖如下
<!--		dependencyManagement
		导入的两个依赖是管理我们导入的其他的依赖,
		它会对我们导入的其他的一些依赖进行版本管理,
		在导入其他的依赖的时候不需要指定版本,
		它会帮助我们选择依赖彼此之间能够兼容的版本-->
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Brussels-SR17</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
<!--下边这个导入的是一个maven的编辑插件,可以对项目进行打包等-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • 整体项目所导入的依赖,可以在GitHub仓库拉取代码查看,这里就不一一列出来了

2. 学习使用restful风格开发

  • 编辑springboot项目启动类
@SpringBootApplication
@RestController
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class,args);
    }
}
  • 在test包下模拟前端数据传递,这里使用MockMvc来模拟发起请求,他相对于HTTPclient,URL等比较方便,不需要网络,启动更快等。
//测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {
    @Autowired
    private WebApplicationContext wac;
    private MockMvc mockMvc;

    @Before
    public void setup(){
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }
}

  • 编写测试代码
    @Test
    public void whenQuerySuccess() throws Exception {
        //使用get方法请求数据
        String result = mockMvc.perform(get("/user")
                //使用param定义请求参数
                .param("username","zcf")
                .param("age","12")
                .param("ageTo","60")
                /*.param("size","15")
                .param("page","3")
                .param("sort","age,desc")*/
                //定义请求的参数为json格式,编码为UTF-8
                .contentType(MediaType.APPLICATION_JSON_UTF8))
                //期望状态码为200
                .andExpect(status().isOk())
                //期望返回的json数据长度为3
                .andExpect(jsonPath("$.length()").value(3))
         //将请求返回的数据转换成字符串形式        
        .andReturn().getResponse().getContentAsString();
        System.out.println("查询所有返回结果"+result);
    }

  • 编写controller层代码
@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping
    @JsonView(User.UserSimpleView.class)
    public List<User> query(UserQueryCondition userQueryCondition, @PageableDefault(page = 1, size = 10, sort = "username.asc") Pageable pageable) {
        System.out.println(ReflectionToStringBuilder.toString(userQueryCondition, ToStringStyle.MULTI_LINE_STYLE));
        //System.out.println(userQueryCondition);
        System.out.println(pageable.getPageSize());
        System.out.println(pageable.getPageNumber());
        System.out.println(pageable.getSort());

        List<User> users = new ArrayList<>();
        users.add(new User());
        users.add(new User());
        users.add(new User());
        return users;
    }
}
  • 以上只列举了一个get查询的demo,其他的put,post,delete等在我们的源码有,如有需要可查看。