小编use*_*343的帖子

我应该在JAX-RS中使用@QueryParam还是@BeanParam?

我在考虑处理查询/请求参数的两个选项:

  1. 将各个参数映射到对应的方法参数:
@GET
public String blah(@QueryParam("testParam") String testParam) {

}
Run Code Online (Sandbox Code Playgroud)
  1. 将所有参数映射到Java bean的属性:
@GET
public String blah(@BeanParam RequestParamBean bean) {

}
Run Code Online (Sandbox Code Playgroud)

第二个选项看起来更具吸引力,因为它允许输入查询参数的验证逻辑被移动和解耦,blah其核心职责应该是处理并将验证委托给验证器进行高度解耦(以及SOLID原则,正确) ?).

但是,我看到的大多数示例(事实上,我正在处理的现有项目)只使用第一个选项.我想知道为什么没有广泛使用第二种选择是否有任何理由?有任何陷阱吗?这是反模式吗?这是否违反任何最佳做法?

java jax-rs

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

Maven / Spring boot 项目 - 如何跳过@SpringBootTest

在我的项目中,有许多标有 @SpringBootTest 的测试,我不将其视为单元测试,而是将其视为集成测试。所以我想在执行时仅运行单元测试:

mvn 干净安装

实际上我想运行这个命令作为预提交 git hook 的一部分,但是 @SpringBootTest 使得完成执行的时间更长。

有没有办法排除标有@SpringBootTest的测试?可能有一种模式我们可以传递给 Maven 来排除/某些测试。或者可以编写一个包含 Spring Boot 测试的测试套件。

我通过谷歌搜索来实现上述目标,但运气不佳。

还有更好的方法吗?

@Update:约束是maven pom文件不能修改。

@Update2:我有一个看起来很有希望的解决方案:

1. Use @Category("IntegrationTests") for @SpringBootTests tests.
2. Create TestSuite with excludeCategory:
@RunWith(CategoryRunner.class)
@ExcludeCategory("IntegrationTests")
public class TestSuite {
}
3. From mvn command line, run only TestSuite.
Run Code Online (Sandbox Code Playgroud)

我不确定这是最好的。欣赏任何人更好的方法。

java junit maven spring-boot

8
推荐指数
2
解决办法
3万
查看次数

整数流

我有代码:

int[] values = { 1, 4, 9, 16 };
Stream<Integer> ints = Stream.of(values);
Run Code Online (Sandbox Code Playgroud)

这给了我编译错误.但:

int[] values = { 1, 4, 9, 16 };
Stream<Integer> ints = Stream.of(new Integer[] {1, 4, 9, 16});
Run Code Online (Sandbox Code Playgroud)

不这样做.为什么?

java-8

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

log.debug是否会降低性能

我想在调试日志中写一些日志,这些日志在具有信息日志级别的生产日志中将不可用。那么,这些额外的调试日志将如何影响性能?我的意思是,如果我们将日志级别设置为INFO,则记录器必须检查日志级别是什么,并发现log.debug需要忽略。

那么这种额外的日志级别检查是否会影响性能?

部署时是否有任何自动删除log.debug()语句的方法?我的意思是在开发期间,log.debug将在那里,我们可以进行调试。但是在生产部署期间,自动魔术机制将删除所有log.debug()消息。我不确定这些是否可行。

java log4j

7
推荐指数
3
解决办法
4191
查看次数

为什么我们需要Java中的Properties类?

我一直想知道为什么我需要一个Properties类,因为我总是可以创建一个HashMap并将键/值对保留在那里。可能是因为它减少了写入装载/存储属性文件的代码量。因为否则,我们必须创建BufferedReader并读取文件,然后拆分String和所有这些。但是,如果我们要从文件以外的来源获取键/值对,那么无论我们使用Properties类还是HashMap类,都可能没有任何区别。我只需要确认我的思维过程是否正确即可。

谢谢

java

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

*/5 和 0/5 之间的 Cron 表达式差异

我有一个 cron 属性文件,其中一些属性包含如下表达式:

"* 0/5 * * * ?"
Run Code Online (Sandbox Code Playgroud)

其中一些包含:

"* */5 * * * ?"
Run Code Online (Sandbox Code Playgroud)

两者有什么区别?

如果我想每 5 分钟运行一次,那么应该使用哪一个?

谢谢

PS:我的项目正在使用 spring 调度程序。

quartz-scheduler

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

具有多个参数的 Mockito 参数匹配器

我有一个带有方法的类:

class URAction {
      public List<URules> getUrules(Cond cond, Cat cat) {
             ...
      } 
}
Run Code Online (Sandbox Code Playgroud)

我想创建它的模拟:

@Mock
URAction uraMock;

@Test
public void testSth() {
    Cond cond1;
    Cat cat1;
    List<URule> uRules;

    // pseudo code
    // when uraMock's getUrules is called with cond1 and cat1
    // then return uRules
}
Run Code Online (Sandbox Code Playgroud)

问题是我可以让模拟返回 uRules 只有一个参数:

 when(uraMock.getUrules(argThat(
        new ArgumentMatcher<Cond> () {

            @Override
            public boolean matches(Object argument) {
                Cond cond = ((Cond) argument);
                 if (cond.getConditionKey().equals(cond1.getConditionKey()) 
                     return true;
                 return false;
            }

        }
    ))).thenReturn(uRules);
Run Code Online (Sandbox Code Playgroud)

不确定如何在上面的 when 调用中传递第二个参数,即 Cat。

任何帮助将不胜感激。 …

java mockito

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

maven 存储库 sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:

我有 pom.xml 的片段,它试图解决 fitbit 依赖性:

<repositories>
        <repository>
            <name>FitBit GitHub Repo</name>
            <id>fitbit4j</id>
            <url>https://nexus.vanntett.net/content/repositories/fitbit/</url>
        </repository>
    </repositories>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Failed to collect dependencies at com.fitbit:fitbit4j:jar:1.0.26: Failed to read artifact descriptor for com.fitbit:fitbit4j:jar:1.0.26: Could not transfer artifact com.fitbit:fitbit4j:pom:1.0.26 from/to fitbit4j (https://nexus.vanntett.net/content/repositories/fitbit/): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]
Run Code Online (Sandbox Code Playgroud)

我在 eclipse 中使用了这些参数: -Dmaven.wagon.http.ssl.insecure=true - Dmaven.wagon.http.ssl.allowall=true

这不起作用。

请帮忙。

谢谢

java maven

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

启动glassfish服务器时的rmiexception

我有glassfish服务器,我正在尝试从netbeans运行服务器.我收到以下错误:

WARNING:   Cannot start JMX connector JmxConnector config: { name = system, Protocol = rmi_jrmp, Address = 0.0.0.0, Port = 8686, AcceptAll = false, AuthRealmName = admin-realm, SecurityEnabled = false} due to exception java.io.IOException: Cannot bind to URL [rmi://MAZUMDAM4.americas.hpqcorp.net:8686/jmxrmi]: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: MAZUMDAM4.americas.hpqcorp.net; nested exception is: 
    java.net.ConnectException: Connection timed out: connect]
SEVERE:   java.io.IOException: Cannot bind to URL [rmi://MAZUMDAM4.americas.hpqcorp.net:8686/jmxrmi]: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: MAZUMDAM4.americas.hpqcorp.net; nested exception is: 
    java.net.ConnectException: Connection timed …
Run Code Online (Sandbox Code Playgroud)

rmi glassfish

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

mockito验证没有用参数调用的方法

我在SUT中有这段代码:

public void sutMethod() {
    if (model == null) {
        dao.save(model);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道模型不会为null,因为模型已经存在.所以我希望dao.save()不应该用模型调用它.因此,我需要一些方法,Mockito.verify不使用此参数调用该方法.现在我知道如何做相反的事情:如何确保/验证dao.save(),或任何方法本身,借助于参数调用ArgumentCaptor,但不确定当前场景.请帮忙.

谢谢

java unit-testing mockito

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

多线程 - 为什么私有成员变量共享?

以下代码的运行在不同时间输出6,7,8.我不知道为什么.每个线程都有count变量,它是私有的.然后他们如何共享相同的变量?

public class ThreadSafety {

    public static void main(String[] args) throws InterruptedException {

        ProcessingThread pt = new ProcessingThread();
        Thread t1 = new Thread(pt, "t1");
        t1.start();
        Thread t2 = new Thread(pt, "t2");
        t2.start();
        //wait for threads to finish processing
        t1.join();
        t2.join();
        System.out.println("Processing count="+pt.getCount());
    }

}

class ProcessingThread implements Runnable{
    private int count = 0;

    @Override
    public void run() {
        for(int i=1; i< 5; i++){
            processSomething(i);
            count++;
        }
    }

    public int getCount() {
        return this.count;
    }

    private void processSomething(int i) {
        // …
Run Code Online (Sandbox Code Playgroud)

java multithreading

0
推荐指数
1
解决办法
785
查看次数

需要帮助理解if语句中的以下布尔表达式

从Kathie Sierra的OCA/OCP Java SE 7程序员I和II学习指南中找到的书:

int x = 2;
int y = 5;
if ((x > 3) && (y < 2) | doStuff()) {
    System.out.println("true");
}
Run Code Online (Sandbox Code Playgroud)

这现在打印......什么都没有!因为前面的代码(少了一组括号)评估就像你说的那样,"如果(x> 3)不是真,并且(y <2)或者doStuff()的结果为真,那么打印true那么,如果(x> 3)不成立,那么在查看表达式的其余部分时没有意义"由于短路&&,表达式被评估为好像周围有括号(y <2)| 做东西().

在我的理解中,运营商&&||具有相同的优先级,并从左至右评估.因此,在这种情况下,(x > 3) && (y < 2)仍应首先评估表达式.请解释.

更新:我的错误.这确实是一个"|" 而不是"||".

java operator-precedence short-circuiting

0
推荐指数
1
解决办法
62
查看次数

春季启动 java.lang.ClassNotFoundException:org.dom4j.io.STAXEventReader

我在本教程的帮助下开发了一个 Spring Boot 应用程序:

https://stormpath.com/blog/tutorial-crud-spring-boot-20-分钟

POM 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-spring-boot</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
Run Code Online (Sandbox Code Playgroud)

当我使用命令运行项目时: mvn spring-boot:run

我收到以下异常:

    Caused by: java.lang.NoClassDefFoundError: org/dom4j/io/STAXEventReader
        at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43)
        at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:87)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:179)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:149)
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:54)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1648) …
Run Code Online (Sandbox Code Playgroud)

java spring-boot

0
推荐指数
1
解决办法
5309
查看次数