小编Joh*_*thy的帖子

使用类名作为JSON Jackson序列化的根密钥

假设我有一个pojo:

import org.codehaus.jackson.map.*;

public class MyPojo {
    int id;
    public int getId()
    { return this.id; }

    public void setId(int id)
    { this.id = id; }

    public static void main(String[] args) throws Exception {
        MyPojo mp = new MyPojo();
        mp.setId(4);
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
        System.out.println(mapper.getSerializationConfig().isEnabled(SerializationConfig.Feature.WRAP_ROOT_VALUE));
        System.out.println(mapper.writeValueAsString(mp));
    }
}
Run Code Online (Sandbox Code Playgroud)

当我使用Jackson ObjectMapper进行序列化时,我得到了

true
{"id":4}
Run Code Online (Sandbox Code Playgroud)

但我想要

true
{"MyPojo":{"id":4}}
Run Code Online (Sandbox Code Playgroud)

我一直在搜索,Jacksons的文档真的没有组织,而且大部分已经过时了.

java serialization json jackson

27
推荐指数
4
解决办法
6万
查看次数

解释导致HashMap.put()执行无限循环的时间

正如许多人已经注意到并遇到的那样,HashMap.put当同时使用时可以进入无限执行循环(参见GRIZZLY-1207,JGRP-525,可能是HHH-6414,以及这个SO 答案).

HashMap清楚地记录为不是线程安全的.显然,正确的解决方法是使用一个线程安全的实现Map,ConncurrentHashMap尤其如此.我对导致无限循环的并发时序更加好奇.我最近使用Java 7 JRE遇到了这个循环,并想了解确切的原因.例如,这是由同时多次看跌引起的吗?

HashMap.put中查看显示HashMap.Entry包含指向下一个节点的链接(在存储桶中?).我假设这些链接正在腐蚀以包含循环引用,这导致无限循环.但是,我仍然不明白腐败是如何发生的.

java concurrency hashmap thread-safety

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

是否有RESTEasy的客户端模拟框架?

RESTEasy为模拟服务器请求提供了服务器端模拟框架.是否有相应的单元测试客户端框架

InMemoryClientExecutor是否用于此目的?我很难找到文档以及如何使用这个类的示例.

java unit-testing jax-rs resteasy

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

guava-libraries:Objects.hashCode(Object [])碰撞是否安全?

在查看覆盖的不同选项时hashCode(),我被引导到Objects.hashCode(Object[])Google的guava-libraries(javadoc)中.javadoc表示它委托给Arrays.hashCode(Object[]).在许多不同的对象类型中使用此方法是否安全?这不容易发生哈希冲突,或者这不仅仅是因为容器通常只包含一种类型的对象?

举个简单的例子,考虑以下类,

public class Student {
    private final String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(name);
    }
}

public class Teacher {
    private final String name;

    public Teacher(String name) {
        this.name = name;
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(name);
    }
}

public class HashCodeDriver {
    public static void main(String[] args) {
        final String name = "moe";
        Student s = new Student(name); …
Run Code Online (Sandbox Code Playgroud)

java hashcode guava

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