Java 我需要对基于spring的RESTWeb服务进行验证

Java 我需要对基于spring的RESTWeb服务进行验证,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我知道控制器中的@Valid符号以及在POJO对象上添加不同的验证。但是像整数和字符这样的原始数据类型如何对它们执行验证呢。我不想为验证创建一个不同的函数或类似的东西。我想使用一些已经存在的spring验证框架。我的另一个问题是,如果我在POJO中包含各种验证。然后,我的验证可能会根据我的需求而改变。(考虑到用户POJO,有时我的请求映射可能会使ID字段不为null,有时它可以为NULL)。是否有一种方法可以将验证与代码分开。并根据需求,通过一个xml(如struts验证框架中的xml)提供验证

我知道控制器中的@Valid符号以及在POJO对象上添加不同的验证。但是像整数和字符这样的原始数据类型如何对它们执行验证呢。我不想为验证创建一个不同的函数或类似的东西。我想使用一些已经存在的spring验证框架。我的另一个问题是,如果我在POJO中包含各种验证。然后,我的验证可能会根据我的需求而改变。(考虑到用户POJO,有时我的请求映射可能会使ID字段不为null,有时它可以为NULL)。是否有一种方法可以将验证与代码分开。并根据需求,通过一个xml(如struts验证框架中的xml)提供验证。请考虑下面的例子来更好地理解.< /P> 我的问题第一部分:

public class User {

    @NotNull
    private String name;//Sometimes I would not have any value on this. 
                        //Sometimes I might have some value on this
    @NotNull
    private int Id;

}
/*This might require a non-null value for user*/
@RequestMapping(value="/user", method=RequestMethod.POST)
public createUser(Model model, @Valid @ModelAttribute("user") User user, BindingResult result){
    if (result.hasErrors()){
      // do something
    }
    else {
      // do something else
    }
}
/*This won't require a compulsory name values*/
@RequestMapping(value="/user", method=RequestMethod.POST)
public createUser(Model model, @Valid @ModelAttribute("user") User user, BindingResult result){
    if (result.hasErrors()){
      // do something
    }
    else {
      // do something else
    }
}
//How do I validate userId in this situation?
@RequestMapping(value = "/{userId}", method = RequestMethod.GET)
User view(@PathVariable String userId){
    //do something
}
我的问题第二部分:

public class User {

    @NotNull
    private String name;//Sometimes I would not have any value on this. 
                        //Sometimes I might have some value on this
    @NotNull
    private int Id;

}
/*This might require a non-null value for user*/
@RequestMapping(value="/user", method=RequestMethod.POST)
public createUser(Model model, @Valid @ModelAttribute("user") User user, BindingResult result){
    if (result.hasErrors()){
      // do something
    }
    else {
      // do something else
    }
}
/*This won't require a compulsory name values*/
@RequestMapping(value="/user", method=RequestMethod.POST)
public createUser(Model model, @Valid @ModelAttribute("user") User user, BindingResult result){
    if (result.hasErrors()){
      // do something
    }
    else {
      // do something else
    }
}
//How do I validate userId in this situation?
@RequestMapping(value = "/{userId}", method = RequestMethod.GET)
User view(@PathVariable String userId){
    //do something
}

我如何使用Spring validation framework进行此类验证和基本类型的验证,而不必创建验证类?

我认为第2部分验证应该在服务上进行,而不是在控制器上进行。当验证某些参数不起作用时,您可能会遇到类似于此的问题。如果您添加另一个未标记为@PathVariable的参数,您的验证可能会起作用。这是因为您在这里处理的是代理的代理,而不是具体的组件。将验证转移到服务中会给您带来更多的灵活性,我认为这是一个更好的设计。在我的项目中,我也对原语类型进行验证,它100%工作,没有问题。

您可以使用验证组来分隔验证用例。但是您仍然需要手动告诉要使用哪个验证组。对于原语类型的验证,我不知道。基本注释对它们不起作用?你能详细说明你的答案吗。当直接应用于控制器时,没有基本注释不起作用。