Spring-Boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。
1、首先在controller上声明需要对数据进行校验
@RequestMapping(value="/url.json",method= {
RequestMethod.POST})
@ResponseBody
@Transactional
public Result<?> xxmethod( @RequestBody @Validated XoPO xoPo)
throws ParseException, UnsupportedEncodingException {
}
2、然后在bean上声明需要被校验的字段、
@data
public class XoPO{
@validated // XoPo类中引用其他对象,也需要校验直接加@validated
private List<OrderPerson> personList;
@NotNull // 校验规则
@Size(max=32,message="code is null")
private String code;
@NotBlank
@Size(max=32,message="product is null")
private String product;
}
3、常用规则
@AssertFalse // 校验false
@AssertTrue // 校验true
@DecimalMax(value=,inclusive=) // 小于等于value,inclusive=true,是小于等于
@DecimalMin(value=,inclusive=) // 与上类似
@Max(value=) // 小于等于value
@Min(value=) // 大于等于value
@NotNull // 检查Null
@Past // 检查日期
@Pattern(regex=,flag=) // 正则
@Size(min=, max=) // 字符串,集合,map限制大小
@Validate // 对po实体类进行校验
参数为对象
@PostMapping("/saveMenu")
public boolean addMenuAuth(@RequestBody Menu menu) {
}
PostMan测试
1、有安全认证时,需要配置 token
2、配置Header
3、配置Body
场景:现在有一个菜品集合,需要找出菜品中的卡路里小于400的菜品并且按照卡路里多少进行排序
class Dish{
String name;
int price;
int calories;
}
普通方式的实现:
public class StreamDemo {
public static void main(String[] args) {
List<Dish> menu=Arrays.asList(
new Dish("pork",800),
new Dish("beef",700),
new Dish("chicken",400),
new Dish("french fries",530),
new Dish("rice",350),
new Dish("fruit",120),
new Dish("pizza",550));
List<Dish> lowCaloriesDish=new ArrayList<>();
for(Dish d:menu)
{
if(d.getCalories()<400)
lowCaloriesDish.add(d);
}
Collections.sort(lowCaloriesDish,new Comparator<Dish>() {
@Override
public int compare(Dish o1, Dish o2) {
return Integer.compare(o1.getCalories(), o2.getCalories());
}
});
for(Dish d:lowCaloriesDish)
System.out.println(d.getName()+" "+d.getCalories());
}
}
使用流实现:
import java.util.List;
import static java.util.stream.Collectors.toList;
public class StreamDemo {
public static void main(String[] args) {
List<Dish> menu=Arrays.asList(
new Dish("pork",800),
new Dish("beef",700),
new Dish("chicken",400),
new Dish("french fries",530),
new Dish("rice",350),
new Dish("fruit",120),
new Dish("pizza",550));
List<String> lowCaloriesDishName=menu.stream()
.filter(d->d.getCalories()<400)
.sorted((d1,d2)->d1.getCalories()-d2.getCalories())
.map(d->d.getName())
.collect(toList());
for(String name:lowCaloriesDishName)
System.out.println(name);
}
}
// 按照sn分组: List
Map<String, List<Map<String, Object>>> dataMap = dataList.stream()