SpringBoot使用表单类接收并校验参数,并将JSON格式字符串转换为列表
一.仔细阅读业务需求
-
假设有一份API文档如下所示
-
可以看到,从前端传递过来的参数较多,且items为json格式的字符串,需要进行特别处理
二.建立表单类接收参数
-
表单类 - OrderForm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class OrderForm {
/**
* 买家姓名
*/
private String name;
/**
* 买家手机号
*/
private String phone;
/**
* 买家地址
*/
private String address;
/**
* 买家openid
*/
private String openid;
private String items;
} -
其中@NotEmpty注解表示其接收参数不能为空或长度为0 ,message为错误信息,除此之外常用的还有@NotNull @NotBlank,其区别如下所述
1
2
3//用在集合上面(不能注释枚举)
//用在String上面
//用在所有类型上面 -
使用@Valid注解做Controller层校验,必要时输出错误信息
1
2
3
4
5
6
7
8
9
10
11
12//创建订单
public ResultVO<Map<String,String>> create( OrderForm orderForm,
BindingResult bindingResult){
if(bindingResult.hasErrors()){
log.error("[创建订单]参数不正确,orderForm={}",orderForm);
throw new SellException(ResultEnum.PARAM_ERROR.getCode(),
bindingResult.getFieldError().getDefaultMessage());
//使用以上方法获取错误信息
}
......
}
三.处理JSON格式字符串
-
添加依赖
1
2
3
4<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency> -
根据第一部分文档需求,我们要提取items参数中的信息转为列表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 创建List
List<OrderDetail> orderDetailList = new ArrayList<>();
// 将json转换为List,注意下列OrderDetail为接收items参数的实体类
try {
orderDetailList = gson.fromJson(orderForm.getItems(),
new TypeToken<List<OrderDetail>>() {
}.getType());
}catch (Exception e){
// 方法上使用@Slf4j注解
log.error("[对象转换错误],json={}", orderForm.getItems());
throw new SellException(ResultEnum.PARAM_ERROR);
}
orderDTO.setOrderDetailList(orderDetailList); -
以上就是要和大家分享的内容啦,利用表单类接收并处理复杂、繁多的接收参数,可以使得编码中的Controller层更简洁,代码更清晰。除了上文提到的校验注解,还有一些常用的SpringBoot校验注解:点击这里
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 515code-实验室!
评论