2015-09-05 117 views
1

我正在使用Jersey启动器和MongoDB启动器包使用spring启动编写休息服务。所以,我有验证通过创建豆上顶层文件的工作:在Spring Boot中验证Mongo文档

@Configuration 
public class MongoValidationBeans { 

    @Bean 
    public ValidatingMongoEventListener validatingMongoEventListener() { 
     return new ValidatingMongoEventListener(validator()); 
    } 

    @Bean 
    public LocalValidatorFactoryBean validator() { 
     return new LocalValidatorFactoryBean(); 
    } 
} 

我有一个文件:

@Document 
public class SomeDocument { 
    @NotEmpty(message="error message that shows on console") 
    private Set<NonDocumentObject> referencesToOtherDocuments; 
} 

设置嵌入的对象:

public class NonDocumentObject { 
    @NotNull(message="can't see this error message") 
    private ObjectId referenceId; 
    @NotBlank 
    private String referenceInfo; 
} 

验证豆尊重我的对象集上的@NotEmpty注释,但他们不尊重NonDocumentObject上的字段上的@NotNull或@NotBlank注释。我如何获得验证来处理嵌入式对象集的字段。

编辑:@有限修复上述问题。另外,当我的顶级文档发生约束违规时,我可以在控制台上看到特定的消息,但是tomcat返回一个响应状态为400的http错误页面。我怎样才能发送一个json对象来提供更多关于错误?我有一个类

public class GenericExceptionMapper implements ExceptionMapper<Throwable> {} 

其捕获404,405等的异常并返回相应信息的JSON对象,但不赶蒙戈约束验证。我想我需要从mongo验证bean中抛出异常,但找不到指示我如何执行的资源。

我也希望能够通过自己的验证将其他对象嵌入到NonDocumentObject中。可能吗?

+0

在Mongo 3.2中会有验证。可能会有助于[看一看](http://stackoverflow.com/a/33602507/1090562) –

回答

0

所以@Valid注释触发级联验证,但我仍然无法弄清楚如何使用异常映射器捕获验证错误,或者其他一些方法来捕获验证错误。