我需要将某个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) 在我的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) 杰克逊有一个注释,用于忽略类中的未知属性:
@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在服务器启动而无需编写其他类?
我如何从 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
谢谢
我有这样的用户类
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 获取存储在我的 …
我试图使用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)
但是结果是一样的。我不知道谁可以删除此属性。我根本不会在另一个地方初始化对象映射器的其他构建器/工厂/等。我做错了什么?
jackson ×3
java ×3
json ×2
spring ×2
android ×1
csv ×1
data-binding ×1
firebase ×1
junit ×1
kotlin ×1
objectmapper ×1
unit-testing ×1
xml ×1