java输出结果校验_JSR 303 数据校验以及放入统一的返回结果

效果:在postman测试,会有默认的响应

{

"timestamp": "2020-04-21T03:53:31.757+0000",

"status": 400,

"error": "Bad Request",

"errors": [

{

"codes": [

"NotBlank.brandEntity.name",

"NotBlank.name",

"NotBlank.java.lang.String",

"NotBlank"

],

"arguments": [

{

"codes": [

"brandEntity.name",

"name"

],

"arguments": null,

"defaultMessage": "name",

"code": "name"

}

],

"defaultMessage": "品牌名必须提交",

"objectName": "brandEntity",

"field": "name",

"rejectedValue": "",

"bindingFailure": false,

"code": "NotBlank"

}

],

"message": "Validation failed for object='brandEntity'. Error count: 1",

"path": "/product/brand/save"

}

将 JSR303的校验结果封装到自己定义的统一返回结果中

对实体类注明校验字段

@Data

@TableName("pms_brand")

public class BrandEntity implements Serializable {

private static final long serialVersionUID = 1L;

/**

* 品牌id

*/

@TableId

private Long brandId;

/**

* 品牌名

*/

@NotBlank(message = "品牌名必须提交")

private String name;

/**

* 品牌logo地址

*/

@NotEmpty

@URL(message = "logo 必须是合法url地址")

private String logo;

/**

* 介绍

*/

private String descript;

/**

* 显示状态[0-不显示;1-显示]

*/

private Integer showStatus;

/**

* 检索首字母

*/

@NotEmpty

@Pattern(regexp = "/^[a-zA-Z]$/", message = "检索首字母必须是一个字母")

private String firstLetter;

/**

* 排序

*/

@NotNull

@Min(value = 0, message = "排序必须大于等于0")

private Integer sort;

}

对Controller方法做处理

BindingResult 是处理的校验结果,对此分析并放入统一的返回结果里

/**

* 保存

*

* @param brand

* @param result 校验结果

* @return

*/

@RequestMapping("/save")

// @RequiresPermissions("product:brand:save")

public R save(@Valid @RequestBody BrandEntity brand, BindingResult result) {

if (result.hasErrors()) {

Map map = new HashMap<>();

// 获取校验的错误结果

result.getFieldErrors().forEach((item) -> {

// 错误提示

String message = item.getDefaultMessage();

// 错误的属性名

String field = item.getField();

map.put(field, message);

});

return R.error(400, "提交的数据不合法").put("data", map);

}

brandService.save(brand);

return R.ok();

}


版权声明:本文为weixin_42121905原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。