当前位置: 首页 > 知识库问答 >
问题:

使用spring boot仅验证rest服务中用户输入的几个属性

公孙阳文
2023-03-14

你好吗

我正在使用Java和Spring Boot开发Rest服务,我有一个关于使用javax.validation.验证用户输入的问题

假设我有一个具有name和age属性的用户模型。

假设我有两个endpoint(A和B),在endpointA中,我只需要验证名称,在endpointB中,我只需要验证年龄。

我面临的问题是使用javax。验证我需要验证两个endpoint上的两个属性。有没有办法只验证我需要在特定endpoint中验证的字段?或者以某种方式禁用endpoint中某些属性的验证?

示例

用户公共类用户{

    @NotEmpty(message="You need to pass the name parameter")
    private String name;

    @NotEmpty(message="You need to pass the age parameter")
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

用户RestController

@RestController
@RequestMapping("/v1/user")
public class UserController {

    @Autowired
    private User _user;

    @RequestMapping(value = "/endpoint-a", method = RequestMethod.POST, consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
    @ResponseBody
    public ResponseEntity<?> doPostEndpointA(@Valid @RequestBody User user) {
        // only validate the user name
    }

    @RequestMapping(value = "/endpoint-b", method = RequestMethod.POST, consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
    @ResponseBody
    public ResponseEntity<?> doPostEndpointB(@Valid @RequestBody User user) {
        // only validate the user age
    }
}

共有1个答案

谯翔
2023-03-14

通过将验证放在域类上,无论调用什么endpoint,都将执行验证。

如果每个终端需要不同的验证,将该逻辑放入控制器并将其从域类中删除。如果您需要保留域类的验证并且每个终端只验证一个字段,也许默认值可以为您解决这个问题。

 类似资料:
  • 问题内容: 我正在开发一个使用Jersey框架的REST应用程序。我想知道如何控制用户身份验证。我搜索了很多地方,最近的文章是:http : //weblogs.java.net/blog/2008/03/07/authentication- jersey 。 但是,本文只能与GlassFish服务器和附加数据库一起使用。无论如何,在到达请求的REST资源之前,我是否可以在Jersey中实现一个接

  • 我正在编写一个程序,用于验证通过HTTP POST发送的用户名和密码,并根据ldap进行验证,无论验证是否成功,都将响应发送回用户。 我的Websecurity配置器实现 我的测试服务器.ldif

  • 我们的项目由Java后端(spring web应用程序)以及iOS和Android客户端应用程序组成。现在我们需要向Java后端添加客户端应用程序的身份验证。其想法是首次使用外部web服务注册用户。在这一步中,用户提供完整的凭证(登录和“大”密码),并选择一些PIN进行进一步授权。在这个主要步骤成功完成后,用户应该能够使用他的登录名和PIN(他之前自己选择的)进行身份验证。这些登录名和pin应该存

  • 使用用户证书验证 SSH (服务端) 在以安全为前提下要保障可靠性、可控性和一致性是非常复杂的。我们可以利用 SSH 又或者说 OpenSSH 来替代所依赖的中央身份验证(比如 LDAP 或者 Kerberos) 除了 通过 PIV 和 PKCS#11 验证 SSH 之外,还可以增加远程 SSH 验证的安全性。Facebook 和 Yahoo 已经更换使用 SSH 用户证书来避免中心认证系统宕机。

  • 我很难想出如何正确使用扫描仪来验证用户输入。例如,程序需要用户输入int,用户只能输入正数,如果用户输入“apple”、“delicious apple”或负数,问题将显示错误消息。我尝试了下面的代码,然后我发现了一个令人不安的问题,“那不是一个数字!”我不知道是什么引起了这些问题。。。。 我在“number=sc.nextInt()”下面加了一行代码,意外地解决了这个问题,现在我的代码变成: 这

  • 我有一个DTO,它在控制器层通过BeanValidation(javax.validation)和定制验证器(org.springframework.validation.Validator)的组合进行验证。通过这种方式,我可以检查提供的输入是否有效,然后转换实体中的DTO并将其转发到服务层。 然后是业务逻辑验证。例如:@Entity用户的startDate必须在某个事件发生之后,如果最后创建的用