对于每个搜索请求,我都允许标签列表.例如,
["search", "open_source", "freeware", "linux"]
Run Code Online (Sandbox Code Playgroud)
我想要检索此列表中包含所有标签的文档.我想要检索:
{
"tags": ["search", "freeware"]
}
Run Code Online (Sandbox Code Playgroud)
并排除
{
"tags": ["search", "windows"]
}
Run Code Online (Sandbox Code Playgroud)
因为list不包含windows标签.
在Elasticsearch文档中有一个完全等于的示例:
https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_multiple_exact_values.html
首先,我们包含一个维护标签数量的字段:
{ "tags" : ["search"], "tag_count" : 1 }
{ "tags" : ["search", "open_source"], "tag_count" : 2 }
Run Code Online (Sandbox Code Playgroud)
其次,我们使用需要的tag_count进行检索
GET /my_index/my_type/_search
{
"query": {
"filtered" : {
"filter" : {
"bool" : {
"must" : [
{ "term" : { "tags" : "search" } },
{ "term" : { "tags" : "open_source" } },
{ "term" : { …Run Code Online (Sandbox Code Playgroud) 我尝试在osgi容器中运行Hibernate验证器.
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.hibernate-validator</artifactId>
<version>5.0.2.Final_1</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.1</version>
</dependency>
public class HibernateValidationProviderResolver implements ValidationProviderResolver {
@Override
public List<ValidationProvider<?>> getValidationProviders() {
List<ValidationProvider<?>> list = new ArrayList<>(1);
list.add(new HibernateValidator());
return list;
}
}
Configuration<?> configuration = Validation.byDefaultProvider().providerResolver(
new HibernateValidationProviderResolver()
).configure();
ValidatorFactory validatorFactory = configuration.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
Set<ConstraintViolation<Group>> constraintViolations = validator.validate(group);
public class Group {
@NotNull
@Size(min=2)
private String title;
}
Run Code Online (Sandbox Code Playgroud)
尝试运行,equinox控制台没问题:
10 RESOLVED …Run Code Online (Sandbox Code Playgroud) 我有一些模特课
public class Account {
@Email
private String email;
@NotNull
private String rule;
}
Run Code Online (Sandbox Code Playgroud)
和弹簧验证器
public class AccountValidator implements Validator {
@Override
public boolean supports(Class aClass) {
return Account.class.equals(aClass);
}
@Override
public void validate(Object obj, Errors errors) {
Account account = (Account) obj;
ValidationUtils.rejectIfEmpty(errors, "email", "email.required");
ValidationUtils.rejectIfEmpty(errors, "rule", "rule.required");
complexValidateRule(account.getRule(), errors);
}
private void complexValidateRule(String rule, Errors errors) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的服务中运行
AccountValidator validator = new AccountValidator();
Errors errors = new BeanPropertyBindingResult(account, "account");
validator.validate(account, errors);
Run Code Online (Sandbox Code Playgroud)
我可以在验证过程中添加约束@Email,@ NotNull(JSR-303)并且不在AccountValidator中描述这些规则吗?
我知道Spring控制器中的@Valid是如何工作的,但服务层是什么?可能吗?如何以适当的方式进行此类验证?我可以使用Hibernate …