Ted*_*Ted 248 java json jackson
尝试使用Jackson序列化一个非常简单的对象时,我得到了一个例外.错误:
org.codehaus.jackson.map.JsonMappingException:没有为类MyPackage.TestA找到序列化程序,也没有发现创建BeanSerializer的属性(为了避免异常,请禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))
下面是序列化的简单类和代码.
任何人都可以告诉我为什么会收到此错误?
public class TestA {
String SomeString = "asd";
}
TestA testA = new TestA();
ObjectMapper om = new ObjectMapper();
try {
String testAString = om.writeValueAsString(testA); // error here!
TestA newTestA = om.readValue(testAString, TestA.class);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
Pro*_*uce 314
如前所述,ObjectMapper实例的默认配置是仅访问属于公共字段或具有公共getter/setter的属性.更改类定义以使字段公开或提供公共getter/setter的替代方法是(向底层VisibilityChecker)指定不同的属性可见性规则.Jackson 1.9提供了ObjectMapper.setVisibility()这样做的便捷方法.对于原始问题中的示例,我可能会将其配置为
myObjectMapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
Run Code Online (Sandbox Code Playgroud)
有关相关配置选项的更多信息和详细信息,建议您查看JavaDocsObjectMapper.setVisibility().
Chr*_*ris 72
对于Jackson来序列化该类,该SomeString字段需要public(现在它的包级别隔离)或者您需要为它定义getter和setter方法.
Gün*_*kin 49
我的源代码中存在同样的问题.我刚才补充道
吸气
和
二传手
问题解决了.
Mar*_*n C 25
我的问题是杰克逊试图序列化一个没有属性和方法的空对象.
正如异常中所建议的,我添加了以下行以避免空bean失败:
杰克逊1.9
myObjectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
Run Code Online (Sandbox Code Playgroud)
对于Jackson 2.X
myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
Run Code Online (Sandbox Code Playgroud)
你可以在jackson上找到一个简单的例子,禁用fail_on_empty_beans
对于我控制的子类,我有同样的问题,对象映射器在一个公共模块中,并且无法访问.我通过为我的子类添加这个注释来解决它,它的对象是序列化的.
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
Run Code Online (Sandbox Code Playgroud)
如果您忘记将.build()方法添加到返回状态,也会抛出此错误.
return Response.status(Status.OK); // fails
return Response.status(Status.OK).build(); // works
Run Code Online (Sandbox Code Playgroud)
没有build()方法我得到以下错误:
org.codehaus.jackson.map.JsonMappingException: No serializer found for class com.sun.jersey.core.spi.factory.ResponseBuilderImpl
Run Code Online (Sandbox Code Playgroud)
如果您可以编辑包含该对象的类,我通常只需添加注释
import com.fasterxml.jackson.annotation.JsonIgnore;
@JsonIgnore
NonSerializeableClass obj;
Run Code Online (Sandbox Code Playgroud)
小智 6
SpringBoot2.0 ?我通过以下代码解决它:
@Bean public ObjectMapper objectMapper() {
return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);}
Run Code Online (Sandbox Code Playgroud)
我发现至少三种方法可以做到这一点:
public getters您尝试序列化的实体;public getters。这会将 Jackson 的默认设置更改为Visbility=DEFAULT接受@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)任何访问修饰符;ObjectMapper通过设置更改您的全局objectMapperInstance.setVisibility(JsonMethod.FIELD, Visibility.ANY);。如果您不需要全局使用此功能,则应避免这种情况。根据您的需求进行选择。
| 归档时间: |
|
| 查看次数: |
271429 次 |
| 最近记录: |