接收数据
- 提倡使用restful风格的url。
- 通过提交的方式和资源来确定你要执行的功能;通过返回的状态码来确定执行成功还是失败。
- post、delete、put、get;好处:全自动生成文档,更加直观。
- putForObject、getForObject路径做参数、from表单参数、json参数。
- 指定方法响应的数据格式:
@RequestMapping(value = "/someurl/suburl", produces = "application/json")
@RequestMapping(value = "/someurl/suburl", produces = "application/xml") - 参数绑定。
A、处理requet uri部分(这里指uri template中variable,不含queryString部分)的注解:@PathVariable;将某个动态参数放到URL请求路径中,即接收路径参数eg:/new/param,此注解放在参数前面。
B、处理request header部分的注解:@RequestHeader,@CookieValue;
C、处理request body部分的注解:@RequestParam,指定了请求参数名称;@RequestBody;允许request的参数在request体中,而不是直接在链接后面,此注解放在参数前面。
D、处理attribute类型是注解:@SessionAttributes,@ModelAttribute; - 服务端。
解决服务端返回乱码问题?produces = "application/json;charset=UTF-8"
接收客户端的数据?(@PathVariable、vo对象、@RequestBody) - 请求域?数据放入到请求域中,进行页面展示。(map、model、modelmap、modelandview)
- 客户端调用。
发送数据给服务端?(数据形式:路径参数、form表单参数、Json参数) - 明确返回的是数据还是页面。如果返回的是数据的话,需要加@ResponseBody注解,同时使用自定义的R进行返回;如果返回的是页面,返回类型定义为String。使用转发(forward)、重定向(redirect)。
校验数据
认识Validator
在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的。在通常的情况下,应用程序是分层的,不同的层由不同的开发人员来完成。很多时候同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题,比如说语义的一致性等。为了避免这样的情况发生,最好是将验证逻辑与相应的域模型进行绑定。Bean Validation 为 JavaBean 验证定义了相应的元数据模型和 API。缺省的元数据是 Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。在应用程序中,通过使用 Bean Validation 或是你自己定义的 constraint,例如 @NotNull, @Max, @ZipCode, 就可以确保数据模型(JavaBean)的正确性。constraint 可以附加到字段,getter 方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的 constraint。Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。
上面是网上的,以下是总结
简介
验证注解
注解 | 用法 |
---|---|
@Null |
被注释的元素必须为 null |
@NotNull |
被注释的元素必须不为 null |
@AssertTrue |
被注释的元素必须为 true |
@AssertFalse |
被注释的元素必须为 false |
@Min(value) |
被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) |
被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) |
被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) |
被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max, min) |
被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) |
被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past |
被注释的元素必须是一个过去的日期 |
@Future |
被注释的元素必须是一个将来的日期 |
@Pattern(value) |
被注释的元素必须符合指定的正则表达式 |
下面是hibernate附加的注解 | |
@Email |
被注释的元素必须是电子邮箱地址 |
@Length |
被注释的字符串的大小必须在指定的范围内 |
@NotEmpty |
被注释的字符串的必须非空 |
@Range |
被注释的元素必须在合适的范围内 |
国际化消息
正常的加消息,是注解的属性,
message
@NotNull(groups = ValidationLogin.class, message = "id不能为空")
单对象校验
实体类
public class Car {
@NotNull
private String manufacturer;
@NotNull
@Size(min = 2, max = 14)
private String licensePlate;
@Min(2)
private int seatCount;
// getter和setter方法省略
}
Controller控制器
@RequestMapping(value = "/validation")
public String validation(@Valid Car car, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
System.out.println(bindingResult.getFieldError().getDefaultMessage());
}
}
分组数据校验
实体类
public class Car {
// 分组验证接口
public interface Validation {
}
@NotNull(groups = Validation.class, message = "不能为空")
private String manufacturer;
@NotNull(groups = Validation.class, message = "不能为空")
@Size(min = 2, max = 14)
private String licensePlate;
@Min(2)
private int seatCount;
// getter和setter方法省略
}
Controller控制器
@RequestMapping("/validationGrop")
public void validationGrop(@Validated(UserVO.ValidationLogin.class) UserVO vo, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
System.out.println(bindingResult.getFieldError().getDefaultMessage());
}
}
注意:BindingResult必须和@Valid、@Validated一起使用,否则会报错!
自定义验证