1.案例
新增@Validated和@Valid注解
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
@FeignClient(name = "server-user",path = "/wyc/user",contextId = "UserInviteActFeignClient",fallbackFactory = UserInviteActFallback.class
//,url = "http://localhost:9910"
)
@Validated
public interface UserInviteActFeignClient {
@PostMapping(value = "/checkWorkerIdentity")
BaseResp checkWorkerIdentity(@RequestBody @Valid CheckWorkerIdentityReq request);
}
新增@NotNull注解
package com.lbdj.app.feign.user.dto.request;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CheckWorkerIdentityReq {
@NotNull(message = "name不能为空")
private String name;
}
2.实现原理:
参数校验是通过AOP-cglib动态代理实现,对加了注解的方法进行增强,在Feign方法执行前的增强方法里校验实体类中加了注解的属性是否满足条件,不满足条件则抛出ConstraintViolationException异常,不能在FeignClient中fallbackFactory中被捕捉,只能在调用FeignClient方法前捕捉,继承自RuntimeException。