微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Spring传入Java中的API时,如何根据条件设置必须填写的字段?

如何解决使用Spring传入Java中的API时,如何根据条件设置必须填写的字段?

我有两个不同的API:A和B,它们获得相同的POJOC。 POJO C具有2个不同的字段x和y。

public class C
{
String x;
String y;
}

是否可以设置一些条件验证注释, 因此,当将POJO c传递给API A时,只有字段x是必填字段, 而对于API B,x和y字段都是必填字段吗?

谢谢。

解决方法

您可以在这种情况下使用验证

例如:-


import javax.validation.constraints.NotEmpty;

public class C {
    
    @NotEmpty
    String X;

    String Y;
    
}

您还可以决定使用@NotEmpty而不是@NotNull来检查它是否不为空。

在控制器级别,您可以使用以下内容:-

methodGet(@Valid @RequestBody final C c)

此methodGet =控制器级别的方法

,

因为您要对同一个POJO进行不同的验证。您将必须使用自定义验证。

基本上,您将必须创建2个自定义注释。然后将这些注释应用于您各自的Apis。

您可以按照本教程进行操作。

Custom Validator

,

最简单的方法是使用验证组。请尝试:

控制器:

@RestController
public class FooController {
    @PostMapping("/api1")
    public Foo foo(@Validated(Api1Validated.class) Foo foo) {
        return foo;
    }
    @PostMapping("/api2")
    public Foo foo2(@Validated(Api2Validated.class) Foo foo) {
        return foo;
    }
}

域类:

@Data
public class Foo {
    @NotEmpty(groups = {Api1Validated.class,Api2Validated.class})
    private String name;
    @NotNull(groups = {Api2Validated.class})
    private Integer age;
}

验证接口:

public interface Api1Validated {
}

public interface Api2Validated {
}

单元测试:

@SpringBootTest
@AutoConfigureMockMvc
public class FooControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private ObjectMapper objectMapper;

    @Test
    public void test() throws Exception {
        Foo foo = new Foo();
        foo.setName("foo");
        this.mockMvc.perform(post("/api1")
                .contentType(MediaType.APPLICATION_JSON)
                .content(objectMapper.writeValueAsString(foo)))
                .andDo(print())
                .andExpect(status().isOk());
        this.mockMvc.perform(post("/api2")
                .contentType(MediaType.APPLICATION_JSON)
                .content(objectMapper.writeValueAsString(foo)))
                .andDo(print())
                .andExpect(status().isBadRequest());
    }
}

版本:春季靴2.3.4,junit 5.7.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。