MVC 开发RESTfulAPI 接口
传统模式:
传统的查询,修改,删除都是GET或者POST
参数以queryString 方式 a=1&b=2 等..
RESTfulAPI中:
用URL描述资源
用HTTP方法描述行为(GET查询详情/POST创建/PUT修改/DELETE删除),使用HTTP状态码来表示不同的结果.
参数JSON方式交互
RESTfulAPI 只是风格,不是强制标准
常用注解:
@RestController: 标记Controller提供RESTAPI
@RequestMapping(value = "/user", method = RequestMethod.GET) 标记http请求到具体方法
@PostMapping
@GetMapping
@RequestParam 参数映射
@PageableDefault(page = 2, size = 17, sort = "username,asc") 指定分页默认参数
@PathVariable : 映射路由参数/xx/${id}
@JsonView 根据指定的方式显示数据,自定义显示
使用接口声明多个视图
在属性的get方法上指定视图,只有添加的才会再返回的数据中
在Controller的方法上指定视图
@RequestBody 解析映射传入的参数JSON字符串
@Valid 校验属性合法性 , 需要和BindingResult 类配合使用
属性常用的验证注解..
自定义验证注解:
第一步创建注解类:
package com.imooc.validator; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = MyConstraintValidator.class) // 具体执行逻辑的类 public @interface MyConstraint { String message(); Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default { }; }
第二步创建具体实现类(验证逻辑)继承ConstraintValidator<注解类, 属性的类型Object>
package com.imooc.validator; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import org.springframework.beans.factory.annotation.Autowired; import com.imooc.service.HelloService; /** * 具体执行逻辑的类 * MyConstraint 标记的注解类 */ public class MyConstraintValidator implements ConstraintValidator<MyConstraint, Object> { @Autowired private HelloService helloService; @Override public void initialize(MyConstraint constraintAnnotation) { System.out.println("my validator init"); } /** * 具体的逻辑 * @param value * @param context * @return */ @Override public boolean isValid(Object value, ConstraintValidatorContext context) { helloService.greeting("tom"); System.out.println(value); return true; } }
第三步 在BindingResult 类中显示