查询请求
本章内容
-
如何编写测试用例
-
常用注解
-
RestController 提供RestAPI
-
RequestMapping及变体。映射http请求到java方法(变体下一章节讲解)
-
RequestParam 映射请求参数到java方法的参数
-
PageableDefault 指定分页参数的默认值
是spring data里面的,如果不使用该框架作为处理层,则不需要该对象
配合Pageable对象使用
-
如何编写测试用例
使用以下依赖
testCompile('org.springframework.boot:spring-boot-starter-test')
编写测试用例环境
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {
@Autowired
private WebApplicationContext wac;
// 伪造的mvc不会真正去启动项目?
// 相对来说会比直接启用项目要快
private MockMvc mockMvc;
@Before
public void setup() {
// befor 注解,每个测试用例执行前都会执行
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
}
编写一个查询用户的测试用例
// 查询成功的测试用例
@Test
public void whenQuerySuccess() throws Exception {
mockMvc
// 发起请求
.perform(MockMvcRequestBuilders.get("/user")
// 添加请求头为json
.contentType(MediaType.APPLICATION_JSON_UTF8)
)
// 期望的结果
// 这里期望返回的http状态码为200
.andExpect(MockMvcResultMatchers.status().isOk())
// 从返回的结果中(json)获取长度,期望长度为3
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3))
;
}
jsonPath
MockMvcResultMatchers.jsonPath("$.length()"
里面的语法是从哪里来的?
查看jsonpath函数源码,方法说明上写着一个连接https://github.com/jayway/JsonPath
点击之后跳转到了https://github.com/json-path/JsonPath
看这里说使用说明文档,发现这里的语法就是该包的使用
编写一个restfull api
@RestController
public class UserController {
@RequestMapping(value = "/user", method = RequestMethod.GET)
public List<User> query(@RequestParam() String username) {
List<User> users = new ArrayList<>();
users.add(new User());
users.add(new User());
users.add(new User());
return users;
}
}
---------------------- 说明 -------------------------
com.example.demo.dto.User 用来与前端返回的对象放在dto中
测试用例需要修改
@Test
public void whenQuerySuccess() throws Exception {
mockMvc
.perform(MockMvcRequestBuilders.get("/user")
// 传递参数
.param("username", "mrcode")
.contentType(MediaType.APPLICATION_JSON_UTF8)
)
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3))
;
}
@RequestParam
注解说明
有以下作用:
- 对参数进行别名的设置(默认与方法入参名一致)
- 对参数控制是否必须(默认必须)
@RequestParam(required = true,name = "xxx") String username
上面的注解作用是:username 必须,且前段传递参数名必须为 xxx;
对查询方法进行改造
查询条件一般是多条件,使用封装成一个对象
public class UserQueryCondition {
private String username;
private int age;
private int ageTo;
private String xxx;
改写服务,这里使用了一个工具类,感觉还可以,故意记录下;
@RequestMapping(value = "/user", method = RequestMethod.GET)
public List<User> query(UserQueryCondition condition) {
// compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.7'
// 一个反射工具类,这里把对象变成一个字符串,支持多种展示形式
System.out.println(ReflectionToStringBuilder.toString(condition, ToStringStyle.MULTI_LINE_STYLE));
测试用例也需要添加查询条件,打印的结果如下
com.example.demo.dto.UserQueryCondition@7f9e8421[
username=mrcode
age=1
ageTo=3
xxx=test
]
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。