Java Hystrix:如何执行@Requestparam和bean验证?

Java Hystrix:如何执行@Requestparam和bean验证?,java,exception,spring-boot,bean-validation,hystrix,Java,Exception,Spring Boot,Bean Validation,Hystrix,我试图通过使用JSR-303bean验证在rest控制器上执行一些参数验证。然而,当我用@HystrixCommand注释我的方法时,所有验证都被忽略 例如: @RestController @验证 公共类测试控制器{ //此方法忽略所有验证:(,即使年龄

我试图通过使用JSR-303bean验证在rest控制器上执行一些参数验证。然而,当我用
@HystrixCommand
注释我的方法时,所有验证都被忽略

例如:

@RestController
@验证
公共类测试控制器{
//此方法忽略所有验证:(,即使年龄<10岁
@HystrixCommand(fallbackMethod=“fallback”)
@RequestMapping(value=“/notok”,method=RequestMethod.GET)
响应法(
HttpServletRequest请求,
@最小(10)@RequestParam(name=“age”)最终整数年龄
) {
返回ResponseEntity.ok(“年龄是”+年龄);
}
//由于年龄验证,如果年龄<10,此方法将引发错误。
//这是预期的行为
@RequestMapping(value=“/ok”,method=RequestMethod.GET)
反应法(
HttpServletRequest请求,
@最小(10)@RequestParam(name=“age”)最终整数年龄
) {
返回ResponseEntity.ok(“年龄是”+年龄);
}
//希斯特里克斯撤退
私有响应性回退(HttpServletRequest请求,@RequestParam(“年龄”)最终整数年龄,可丢弃e){
返回ResponseEntity.badRequest().body(“错误”);
}
}
对于
methodNotOk
,将完全忽略
@Min
注释,因此服务器可以响应
年龄为5
,这对于此测试用例是不正确的

但是,如果我删除
@HystrixCommand
,一切都会正常进行

因此,问题是在使用
@HystrixCommand
时,如何验证一些方法参数


谢谢你的帮助

我也有同样的问题,但我在网上没有找到任何东西

我认为原因在于加载方面的顺序(HystrixCommandSpect在加载验证器之前创建Bean的代理),但我无法找到使用Spring的Java配置更改它的方法

我最后的办法是使用@HystrixCommand将逻辑移动到另一个Bean,然后在控制器中使用委托模式

@RestController
@Validated
public class TestController {

    @Autowired
    private TestHystrixController delegate;

    @RequestMapping(value = "/notok", method = RequestMethod.GET)
    ResponseEntity<String> methodNotOk(HttpServletRequest request,
         @Min(10) @RequestParam(name = "age") final int age) {
        return delegate.methodNotOk(request, age);
    }
}

@Controller
class TestHystrixController {

    @HystrixCommand(fallbackMethod = "fallback")
    ResponseEntity<String> methodNotOk(HttpServletRequest request,
         final int age) {
        return ResponseEntity.ok("Age is " + age);
    }
}
@RestController
@验证
公共类测试控制器{
@自动连线
私人TestHystrix控制器代表;
@RequestMapping(value=“/notok”,method=RequestMethod.GET)
ResponseEntity methodNotOk(HttpServletRequest请求,
@最小(10)@RequestParam(name=“age”)最终整数年龄{
返回delegate.methodNotOk(请求,年龄);
}
}
@控制器
类TestHystrix控制器{
@HystrixCommand(fallbackMethod=“fallback”)
ResponseEntity methodNotOk(HttpServletRequest请求,
最终积分){
返回ResponseEntity.ok(“年龄是”+年龄);
}
}

我也有同样的问题,我在互联网上找不到任何东西

我认为原因在于加载方面的顺序(HystrixCommandSpect在加载验证器之前创建Bean的代理),但我无法找到使用Spring的Java配置更改它的方法

我最后的办法是使用@HystrixCommand将逻辑移动到另一个Bean,然后在控制器中使用委托模式

@RestController
@Validated
public class TestController {

    @Autowired
    private TestHystrixController delegate;

    @RequestMapping(value = "/notok", method = RequestMethod.GET)
    ResponseEntity<String> methodNotOk(HttpServletRequest request,
         @Min(10) @RequestParam(name = "age") final int age) {
        return delegate.methodNotOk(request, age);
    }
}

@Controller
class TestHystrixController {

    @HystrixCommand(fallbackMethod = "fallback")
    ResponseEntity<String> methodNotOk(HttpServletRequest request,
         final int age) {
        return ResponseEntity.ok("Age is " + age);
    }
}
@RestController
@验证
公共类测试控制器{
@自动连线
私人TestHystrix控制器代表;
@RequestMapping(value=“/notok”,method=RequestMethod.GET)
ResponseEntity methodNotOk(HttpServletRequest请求,
@最小(10)@RequestParam(name=“age”)最终整数年龄{
返回delegate.methodNotOk(请求,年龄);
}
}
@控制器
类TestHystrix控制器{
@HystrixCommand(fallbackMethod=“fallback”)
ResponseEntity methodNotOk(HttpServletRequest请求,
最终积分){
返回ResponseEntity.ok(“年龄是”+年龄);
}
}

如果您颠倒顺序(放置
@HystrixCommand
秒),会发生什么情况?@Michael始终保持相同的行为,验证将被忽略。如果您颠倒顺序(放置
@HystrixCommand
秒),会发生什么情况?@Michael始终保持相同的行为,验证将被忽略。。