【发布时间】:2020-10-19 11:46:10
【问题描述】:
我有使用服务的自定义验证器
public class ProductCodeValidator implements ConstraintValidator<ProdutCode, Set<String>> {
...
@Override
public boolean isValid(Set<String> pkdCodes, ConstraintValidatorContext context) {
return pkdCodes != null && service.count(pkdCodes) == pkdCodes.size();
}
我的目标是在控制器 MVC 测试中使用它,通过模拟服务来控制验证输出。
为了在控制器请求中测试它,我尝试使用@WebMvcTest。但随后安全性突然出现,到处给我 403。为了禁用它,我添加了:
@AutoConfigureMockMvc(addFilters = false) // to avoid security
@WebMvcTest(ProdutDataController.class)
class EditCompanyRegistryDataControllerTest {
@MockBean
private ProductService pkdService;
@Autowired
private MockMvc mvc;
但现在 Spring 也忽略了表单验证,在应该触发验证时返回状态 200/201 而不是 400。
问题:
1 有没有办法只禁用安全性,而无需在 MVC 测试中进行验证?
2 是否可以使用 MockMvcBuilders.standaloneSetup(...) 构建器注册自定义验证器?这样我就可以忽略 spring 上下文,而专注于使用 mocks 进行独立设置。
【问题讨论】:
标签: spring-mvc spring-security spring-test spring-validator