相关疑难解决方法(0)

杰克逊与JSON:未被识别的领域,没有标记为可忽略

我需要将某个JSON字符串转换为Java对象.我正在使用Jackson进行JSON处理.我无法控制输入JSON(我从Web服务中读取).这是我的输入JSON:

{"wrapper":[{"id":"13","name":"Fred"}]}
Run Code Online (Sandbox Code Playgroud)

这是一个简化的用例:

private void tryReading() {
    String jsonStr = "{\"wrapper\"\:[{\"id\":\"13\",\"name\":\"Fred\"}]}";
    ObjectMapper mapper = new ObjectMapper();  
    Wrapper wrapper = null;
    try {
        wrapper = mapper.readValue(jsonStr , Wrapper.class);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("wrapper = " + wrapper);
}
Run Code Online (Sandbox Code Playgroud)

我的实体类是:

public Class Student { 
    private String name;
    private String id;
    //getters & setters for name & id here
}
Run Code Online (Sandbox Code Playgroud)

My Wrapper类基本上是一个容器对象,用于获取我的学生列表:

public Class Wrapper {
    private List<Student> students;
    //getters & setters here
}
Run Code Online (Sandbox Code Playgroud)

我一直收到这个错误,"包装"返回null.我不确定缺少什么.有人可以帮忙吗?

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: 
    Unrecognized field …
Run Code Online (Sandbox Code Playgroud)

java data-binding json jackson

602
推荐指数
30
解决办法
69万
查看次数

如何管理Kotlin中的单元测试资源,例如启动/停止数据库连接还是嵌入式弹性搜索服务器?

在我的Kotlin JUnit测试中,我想启动/停止嵌入式服务器并在我的测试中使用它们.

我尝试@Before在我的测试类中的方法上使用JUnit 注释,它工作正常,但它不是正确的行为,因为它运行每个测试用例而不是一次.

因此,我想@BeforeClass在方法上使用注释,但将其添加到方法会导致错误,说它必须在静态方法上.Kotlin似乎没有静态方法.然后同样适用于静态变量,因为我需要保留对嵌入式服务器的引用,以便在测试用例中使用.

那么如何为我的所有测试用例创建一次这个嵌入式数据库呢?

class MyTest {
    @Before fun setup() {
       // works in that it opens the database connection, but is wrong 
       // since this is per test case instead of being shared for all
    }

    @BeforeClass fun setupClass() {
       // what I want to do instead, but results in error because 
       // this isn't a static method, and static keyword doesn't exist
    }

    var referenceToServer: ServerType // wrong because is not static …
Run Code Online (Sandbox Code Playgroud)

junit unit-testing kotlin

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

你如何全球设置杰克逊忽略Spring内的未知属性?

杰克逊有一个注释,用于忽略类中的未知属性:

@JsonIgnoreProperties(ignoreUnknown = true) 
Run Code Online (Sandbox Code Playgroud)

它允许您使用此批注忽略特定属性:

@JsonIgnore
Run Code Online (Sandbox Code Playgroud)

如果您想全局设置它,您可以修改对象映射器:

// jackson 1.9 and before
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// or jackson 2.0
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Run Code Online (Sandbox Code Playgroud)

你如何使用spring全局设置它,以便它可以@Autowired在服务器启动而无需编写其他类?

xml spring jackson

51
推荐指数
3
解决办法
6万
查看次数

Jackson JsonMappingException:无法识别的列“C”:已知列{“A”,“B”}

我如何从 myBean 创建部分表示

类 MyBean{ A、B、C }

我想仅为 A、B 属性创建 csv

使用下面的代码抛出异常

CsvSchema schema = CsvSchema.builder().
                    .addColumn("A")
                    .addColumn("B")
                    .build();
Run Code Online (Sandbox Code Playgroud)

CsvMapper 映射器 = new CsvMapper(); ObjectWriter writer = mapper.writer(schema);

byte[] csv = writer.writeValueAsBytes(bean);

得到异常:

JsonMappingException:无法识别的列“C”:已知列{“A”,“B”}

我正在使用杰克逊 2.7.3

谢谢

java csv json

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

如何从android中的firebase获取对象?

我有这样的用户类

public class User{
int id;
String description;
String shortDescription;
String photo;

public int getId() {
    return id;
}

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

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getShortDescription() {
    return shortDescription;
}

public void setShortDescription(String shortDescription) {
    this.shortDescription = shortDescription;
}

public String getPhoto() {
    return photo;
}

public void setPhoto(String photo) {
    this.photo = photo;
}
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 FirebaseRecyclerAdapter 获取存储在我的 …

android firebase firebase-realtime-database

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

无法在Spring Boot中将ProblemHandler设置为ObjectMapper

我试图使用Jackson2ObjectMapperBuilderCustomizer将自定义问题处理程序添加到对象映射器:

@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
    return new Jackson2ObjectMapperBuilderCustomizer() {
        @Override
        public void customize(Jackson2ObjectMapperBuilder builder) {
            ObjectMapper m = builder.build();
            m.addHandler(
                    new DeserializationProblemHandler() {
                        @Override
                        public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer<?> deserializer, Object beanOrClass, String propertyName) throws IOException {
                            System.out.println("ahahahaa");
                            return super.handleUnknownProperty(ctxt, p, deserializer, beanOrClass, propertyName);
                        }
                    }
            );
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

但是当我自动装配ObjectMapper bean时,_problemHandlers属性为null。

我也尝试过使用以下命令自定义现有的ObjectMapper:

@Autowired
public customize(ObjectMapper mapper) {
...
}
Run Code Online (Sandbox Code Playgroud)

但是结果是一样的。我不知道谁可以删除此属性。我根本不会在另一个地方初始化对象映射器的其他构建器/工厂/等。我做错了什么?

java spring jackson objectmapper jackson-databind

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