小编Nil*_*esh的帖子

为什么map.merge()每次都不调用重映射函数?

Map.merge()javadoc说,

如果指定的键尚未与值关联或与null关联,则将其与给定的非空值关联.否则,将相关值替换为给定重映射函数的结果,或者如果结果为null则删除.当组合密钥的多个映射值时,该方法可以是有用的.例如,要创建或附加String msg到值映射.

例如,要计算一篮子中每种类型的水果数量,代码如下:

public static void main(String[] args) {
    Map<String, Integer> fruitCounts = new HashMap<>();
    List<String> fruitBasket = Arrays.asList(
        "Apple", "Banana", "Apple", "Orange", "Mango", "Orange", "Mango", "Mango");
    for (String fruit : fruitBasket) {
        fruitCounts.merge(fruit, 1/*First fruit of this type*/, (k, v) -> v + 1);
    }
    System.out.println(fruitCounts);
}
Run Code Online (Sandbox Code Playgroud)

有2个苹果,3个芒果,2个橙子和1个香蕉,但实际产量是

{Apple=2, Mango=2, Orange=2, Banana=1}
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?

java lambda hashmap java-8

5
推荐指数
2
解决办法
1033
查看次数

如何在Spring Rest中记录所有请求-响应?

应用程序应在不影响客户端的情况下(在单独的线程中)异步记录以下信息。

  • 请求HTTP方法和URI
  • 请求标头(默认值除外)
  • 客户端的IP地址
  • 请求处理时间(以毫秒为单位)
  • 请求正文
  • 反应体

如果我们inputstream在过滤器中使用,那么spring不能再次使用它来将json映射到对象。在输入流到对象映射的某个地方,我们可以插入记录器吗?

更新:

我们可以在MessageConverter中重写日志记录代码,但这似乎不是一个好主意。

public class MyMappingJackson2MessageConverter extends AbstractHttpMessageConverter<Object> {
    ...
    protected Object readInternal(Class<? extends Object> clazz, HttpInputMessage inputMessage)
            throws IOException, HttpMessageNotReadableException {
        InputStream inputStream = inputMessage.getBody();
        String requestBody = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
        String method = request.getMethod();
        String uri = request.getRequestURI();
        LOGGER.debug("{} {}", method, uri);
        LOGGER.debug("{}", requestBody);
        return objectMapper.readValue(requestBody, clazz);
    }

    protected void writeInternal(Object o, HttpOutputMessage outputMessage)
            throws IOException, HttpMessageNotWritableException {
        String responseBody = objectMapper.writeValueAsString(o);
        LOGGER.debug("{}", responseBody);
        outputMessage.getBody().write(responseBody.getBytes(StandardCharsets.UTF_8));
    }
}
Run Code Online (Sandbox Code Playgroud)

rest logging spring spring-boot

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

为什么组件扫描不适用于 Spring Boot 单元测试?

服务类用@Service又名FooServiceImpl注释,这使其符合自动装配的条件。为什么在单元测试期间这个类没有被拾取和自动装配?@Component

@Service
public class FooServiceImpl implements FooService {
    @Override
    public String reverse(String bar) {
        return new StringBuilder(bar).reverse().toString();
    }
}

@RunWith(SpringRunner.class)
//@SpringBootTest
public class FooServiceTest {
    @Autowired
    private FooService fooService;
    @Test
    public void reverseStringShouldReverseAnyString() {
        String reverse = fooService.reverse("hello");
        assertThat(reverse).isEqualTo("olleh");
    }
}
Run Code Online (Sandbox Code Playgroud)

测试未能加载应用程序上下文,

2018-02-08T10:58:42,385 INFO    Neither @ContextConfiguration nor @ContextHierarchy found for test class [io.github.thenilesh.service.impl.FooServiceTest], using DelegatingSmartContextLoader
2018-02-08T10:58:42,393 INFO    Could not detect default resource locations for test class [io.github.thenilesh.service.impl.FooServiceTest]: no resource found for suffixes {-context.xml}.
2018-02-08T10:58:42,394 INFO …
Run Code Online (Sandbox Code Playgroud)

java spring integration-testing unit-testing spring-boot

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

为什么我不能使用mongo shell连接到副本集?

我可以使用mongo shell版本3.2.11中的以下命令连接到副本集.但同样适用于mongo shell v3.4.1.

mongo --host \
      "replicaSet1/10.10.10.15:27001,10.10.10.16:27002,10.10.10.17:27000" mydbname \
      -u root -p root \
      --authenticationDatabase admin

 [main] Error: Failed to parse mongodb:// URL: mongodb://replicaSet1/10.10.10.15:27001,10.10.10.16:27002,10.10.10.17:27000/mydbname :
Run Code Online (Sandbox Code Playgroud)

我在这里读到,自v 3.4.1发布以来,副本集地址格式没有改变.

为什么我无法连接到db?什么是解析错误,根据新格式(如果它在那里).

mongodb mongo-shell

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

字符串列表上的@Pattern 注释

我正在使用 javax.validation.constraints.Pattern。

我正在添加模式的 pojo 还包含一个 List 对象。如何添加 @Pattern 注释以便检查元素?

@NotNull
private List<String> myListOfStrings;
Run Code Online (Sandbox Code Playgroud)

谢谢

java regex annotations bean-validation

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

如何在阵列上使用ForEach控制器?

jmeter ForEach控制器可用于迭代具有相同前缀的变量,如

myVar_1
myVar_2
myVar_3
Run Code Online (Sandbox Code Playgroud)

但在我的情况下输入变量是字符串数组,[ "val1", "val2", "val3" ]如何迭代数组并为每个值发送单独的请求?

jmeter jmeter-plugins

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

如何获得SSL握手中生成的对称密钥?

在SSL握手期间,客户端使用服务器的公钥加密生成的预主密钥并发送到服务器.服务器和客户端都执行步骤以使用约定的密码生成主密钥.客户端和服务器都使用主密钥生成会话密钥,这些密钥是用于加密和解密SSL会话期间交换的信息的对称密钥

http://www.symantec.com/connect/blogs/how-does-ssl-work-what-ssl-handshake

如何获取对称密钥,以便我可以将其存储到数据库中,并在每次客户端连接时使用相同的密钥?

服务器和客户端都应保存该密钥,并且永远不再进行握手过程.下次(即使断开连接后),他们应该使用https上的对称密钥直接启动通信.

简而言之,我希望SSL会话永远持续下去.

编辑 Android设备是客户端.每当客户端上线时,客户端 - 服务器仅交换少量字节数据.在这种情况下SSL是开销,不是吗?

java ssl https jsse tomcat8

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