我不知道你是否能够从标题中弄清楚我想要做什么,所以我会尝试用例子来解释
让我们假设我已经创建了自己的注释 @VerifySomething
我已经为该注释创建了测试类,以确保它的工作原理.
现在让我们假设我有一个带有注释的SomeClass
字段的类something
@VerifySomething
class SomeClass {
@VerifySomething
String something;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都那么好,但是现在我想test class
为我创建SomeClass
但是我没有看到任何关于验证所有测试用例的内容,因为我已经检查@VerifySomething
过它在应用于测试该注释的类中应该工作,但是我需要确保该字段实际上有一个@VerifySomething
注释没有复制粘贴所有这些测试用例.
所以我的问题是,有没有办法检查某个字段是否有一个或多个必需的注释,而不编写我已经在注释测试类中编写的测试用例,以确保它按预期工作.
我知道这个问题被问了很多次但是我真的很难克服它.我通过看到这些问题尝试了很多组合,但似乎没有人适合我的情况.
完整的日志错误如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'professorController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.personal.online.dao.ProfessorDao com.personal.online.controller.ProfessorController.professorDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.personal.online.dao.ProfessorDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:643)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:606) …
Run Code Online (Sandbox Code Playgroud) 我有以下片段,我试图用来验证注册表项(操作系统是Windows 2008R2或Win7)
def value_exists?(path,key)
reg_type = Win32::Registry::KEY_READ
Win32::Registry::HKEY_LOCAL_MACHINE.open(path, reg_type) do |reg|
begin
regkey = reg[key]
return true
rescue
return false
end
end
end
Run Code Online (Sandbox Code Playgroud)
当我执行以下2个命令时,输出是预期的(在我的情况下返回false):
puts(value_exists?("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\",'PendingFileRenameOperations'))
puts(value_exists?("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing\\",'RebootPending'))
Run Code Online (Sandbox Code Playgroud)
当我表演时
puts(value_exists?("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate\\Auto Update\\",'RebootRequired'))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
C:/Ruby187/lib/ruby/1.8/win32/registry.rb:528:in `open': The system cannot find the file specified. (Win32::Registry::Error)
from C:/Ruby187/lib/ruby/1.8/win32/registry.rb:608:in `open'
from ./reg2.rb:7:in `value_exists?'
from ./reg2.rb:21
Run Code Online (Sandbox Code Playgroud)
我真的不明白该怎么做才能做到这一点.我怀疑它可能与x64系统有关,而且无法在正确的位置找到密钥.但我不确定我需要做些什么才能解决这个问题.
感谢您的帮助!
我试图找到MediaStore使用的sqlite数据库.据我所知,MediaStore包含默认音乐应用程序中定义的播放列表.我实际上想要复制一个播放列表,但应用程序不允许这样做.不知何故,如果我能找到实际的db文件,我想我可以解决这个问题.但是我现在完全陷入了困境,因为我找不到数据库.顺便说一下,我正在运行FroYo.
我试图使用来自Hibernate Search的QueryBuilder,其中的字段不是相应实体的属性,而是使用ClassBridge在运行中构建.我能这样做吗?
QueryBuilder qb = fullTextEntityManager.getSearchFactory().
buildQueryBuilder().forEntity(Publication.class).get();
....
Query query = qb.keyword().onField("title").matching("Lärm").createQuery();
Run Code Online (Sandbox Code Playgroud)
字段"title"不是Publication类的一部分,但在Lucene索引中可用(并且可搜索).
更新:根据https://forum.hibernate.org/viewtopic.php?f=9&t=1008943,以下工作:
QueryBuilder qb = fullTextEntityManager.getSearchFactory().
buildQueryBuilder().forEntity(Publication.class).get();
....
Query query = qb.keyword().onField("title").ignoreFieldBridge().matching("Lärm").createQuery();
Run Code Online (Sandbox Code Playgroud)
(ignoreFieldBridge做了伎俩)
我试图在Windows上使用以下内容生成Ruby进程:
p1 = spawn('ruby', 'loop.rb', [:out, :err] => ['process.log', "w"], :new_pgroup => true)
Run Code Online (Sandbox Code Playgroud)
然后我也通过以下方式脱离了这个过程:
p1.detach
Run Code Online (Sandbox Code Playgroud)
到目前为止,我应该理解创建一个独立于父进程的新进程.我甚至使用new_pgroup参数来确保新进程获得自己的进程组.
当我执行我的脚本时,子进程启动并继续运行.产生子进程的脚本的执行也完成了.但是,当我现在关闭shell时,子进程就会死掉.我希望它能继续运行(它在OS X和Linux上运行).我无法弄清楚这是否是Windows上Ruby运行时的错误,或者这是否是Windows的限制以及它如何处理进程.
为了完整性,我想要做的完整Ruby代码:
spawner.rb:可以通过执行ruby spawner.rb
并生成一个新的子流程.进程创建的是loop.rb,这只是一个无限循环.根据操作系统,它为进程组创建指定了不同的参数.
require "tempfile"
require 'rbconfig'
class SpawnTest
def self.spawn_process
if os == :windows
p1 = spawn('ruby', 'loop.rb', [:out, :err] => ['process.log', "w"], :new_pgroup => true)
else
p1 = spawn('ruby', 'loop.rb', [:out, :err] => ['process.log', "w"], :pgroup => true)
end
# Detach from the processes so they will keep running
puts p1
Process.detach(p1)
end
def self.os …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为 Rest API 实现注册控制器。我已经阅读了很多关于放置@Transactional 的内容。(不是在 DAO 级别,而是在可能编排的服务)。在我的用例中,我不仅需要服务,还需要休眠验证来使用相同的事务。
这是控制器的代码:
@Autowired
private UserService userService;
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
@Transactional
public DefaultResponse register(@Valid RegisterIO registerIO, BindingResult errors) {
DefaultResponse result = new DefaultResponse();
if (errors.hasErrors()) {
result.addErrors(errors);
} else {
userService.register(registerIO);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我编写了一个自定义约束注释,它验证参数 registerIO 的属性。两者,这个验证器和 userService.register(registerIO); 访问数据库(检查电子邮件地址是否已被使用)。
因此我希望这两种方法都使用相同的 Hibernate 会话和事务。
这种方法导致以下异常:
org.hibernate.HibernateException: No Session found for current thread
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:941)
Run Code Online (Sandbox Code Playgroud)
问题是@Transactional 注释。当我将此注释放在调用数据库的方法上时,一切正常,但两个事务都开始了。我怀疑当我将它放在 register 方法中时,在 @Transactional 启动此方法的事务之前执行休眠验证。
我开发了以下功能解决方法,但我对此并不满意。此代码不使用 @Valid 注释而是自行调用验证器:
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
@Transactional
public DefaultResponse register( RegisterIO registerIO, BindingResult …
Run Code Online (Sandbox Code Playgroud) java spring-mvc transactional hibernate-validator hibernate-4.x
我java.lang.ClassNotFoundException: org.glassfish.jersey.server.internal.RuntimeExecutorsBinder$BackgroundSchedulerLiteral
在尝试jersey-bean-validation
使用gradle 集成扩展时遇到异常.
group 'test.bean'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'war'
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
compile group: 'org.glassfish.jersey.ext', name: 'jersey-bean-validation', version: '2.22.2'
compile group: 'org.glassfish.jersey.bundles.repackaged', name: 'jersey-guava', version: '2.19'
compile 'javax.ws.rs:javax.ws.rs-api: 2.0.1'
compile 'org.glassfish.jersey.containers:jersey-container-servlet-core:2.4'
compile group: 'org.glassfish.jersey.core', name: 'jersey-server', version: '2.22.2'
}
Run Code Online (Sandbox Code Playgroud)
完整的堆栈跟踪是:
15-Jun-2016 13:00:03.816 SEVERE [RMI TCP Connection(20)-127.0.0.1] org.apache.catalina.core.ApplicationContext.log StandardWrapper.Throwable
java.lang.NoClassDefFoundError: org/glassfish/jersey/server/internal/RuntimeExecutorsBinder$BackgroundSchedulerLiteral
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:307)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:167)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:349)
at javax.servlet.GenericServlet.init(GenericServlet.java:158) …
Run Code Online (Sandbox Code Playgroud) 我正在验证我的数据访问对象类的字段。在一次尝试中,我开始向属性(@NotNull、@NotBlank、@Min、@Max 等)添加 Bean 验证注释。我还有更多注释 Jackson (JsonProperty (..)) 用于 swagger 库和文档(@Api (...))。在我看来,这个类非常“脏”,有很多注释(每个属性至少有三个注释)。一个字段的示例:
@JsonProperty("ownName")
@Api(description="it is my own name" required=true)
@Valid
@NotNull
private SomeObject object;
Run Code Online (Sandbox Code Playgroud)
在另一次尝试中,我使用 SpringValidator
接口执行了我自己的验证。如果使用自定义验证器,例如 Spring 接口,它似乎更清晰,并且还允许您自由地为不同情况生成多个验证器。此外,该类似乎没有过多的注释和验证独立于该类。示例Validator
:
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> arg0) {
return User.class.isAssignableFrom(arg0);
}
@Override
public void validate(Object obj, Errors error) {
User user = (User) obj;
if(user.getPassword().length() < 10)
{
error.reject("Password must be lesser than 10");
}
//more validations....
}
}
Run Code Online (Sandbox Code Playgroud)
java ×4
ruby ×2
spring-mvc ×2
windows ×2
android ×1
gradle ×1
hibernate ×1
jersey ×1
jpa ×1
lucene ×1
mediastore ×1
portability ×1
powershell ×1
registry ×1
shell ×1
spawn ×1
spring ×1
validation ×1