小编Har*_*rdy的帖子

确定字段是否使用给定注释进行注释

我不知道你是否能够从标题中弄清楚我想要做什么,所以我会尝试用例子来解释

让我们假设我已经创建了自己的注释 @VerifySomething

我已经为该注释创建了测试类,以确保它的工作原理.

现在让我们假设我有一个带有注释的SomeClass字段的类something@VerifySomething

class SomeClass {
    @VerifySomething
    String something;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都那么好,但是现在我想test class为我创建SomeClass但是我没有看到任何关于验证所有测试用例的内容,因为我已经检查@VerifySomething过它在应用于测试该注释的类中应该工作,但是我需要确保该字段实际上有一个@VerifySomething注释没有复制粘贴所有这些测试用例.

所以我的问题是,有没有办法检查某个字段是否有一个或多个必需的注释,而不编写我已经在注释测试类中编写的测试用例,以确保它按预期工作.

java hibernate-validator

13
推荐指数
1
解决办法
1万
查看次数

NoSuchBeanDefinitionException期望至少有一个bean可以作为此依赖项的autowire候选者

我知道这个问题被问了很多次但是我真的很难克服它.我通过看到这些问题尝试了很多组合,但似乎没有人适合我的情况.

完整的日志错误如下:

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)

java hibernate jpa spring-mvc

9
推荐指数
1
解决办法
5万
查看次数

ruby注册表检查

我有以下片段,我试图用来验证注册表项(操作系统是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系统有关,而且无法在正确的位置找到密钥.但我不确定我需要做些什么才能解决这个问题.

感谢您的帮助!

ruby windows registry

8
推荐指数
1
解决办法
3930
查看次数

Android MediaStore sqlite db位置

我试图找到MediaStore使用的sqlite数据库.据我所知,MediaStore包含默认音乐应用程序中定义的播放列表.我实际上想要复制一个播放列表,但应用程序不允许这样做.不知何故,如果我能找到实际的db文件,我想我可以解决这个问题.但是我现在完全陷入了困境,因为我找不到数据库.顺便说一下,我正在运行FroYo.

android mediastore

7
推荐指数
2
解决办法
1万
查看次数

当一段代码被称为便携式时意味着什么?

我在很多文档中都看到一段代码是可移植的.

谁能准确地向我解释调用一段代码是否便携?

portability

7
推荐指数
2
解决办法
5466
查看次数

Hibernate Search QueryBuilder:查询非实体字段

我试图使用来自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做了伎俩)

lucene hibernate-search

6
推荐指数
0
解决办法
1265
查看次数

当shell终止时,Windows上生成的Ruby进程将死亡

我试图在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)

ruby windows shell powershell spawn

6
推荐指数
1
解决办法
420
查看次数

Hibernate 验证和 Spring 控制器的一项事务

我正在尝试为 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

5
推荐指数
1
解决办法
1403
查看次数

java.lang.ClassNotFoundException:org.glassfish.jersey.server.internal.RuntimeExecutorsBinder $ BackgroundSchedulerLiteral

java.lang.ClassNotFoundException: org.glassfish.jersey.server.internal.RuntimeExecutorsBinder$BackgroundSchedulerLiteral 在尝试jersey-bean-validation使用gradle 集成扩展时遇到异常.

以下是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)

jersey gradle

5
推荐指数
1
解决办法
1637
查看次数

何时使用 Bean 验证与自定义验证框架?

我正在验证我的数据访问对象类的字段。在一次尝试中,我开始向属性(@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 validation spring bean-validation spring-validator

5
推荐指数
1
解决办法
1218
查看次数