@Entity
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class SomeRandomEntity {
private String var1;
private String var2;
private String var3;
public JSONObject getJSONObject throws JSONException {
JSONObject properties = new JSONObject();
properties.put("var1", getVar1());
properties.put("var2", getVar2());
properties.put("var3", getVar3());
return properties;
}
}
这个POJO对象以json对象的形式提供给前端。但是,在前端提取数据时,出现了此错误。
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.json.JSONObject]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: org.springframework.data.domain.PageImpl["content"]->java.util.Collections$UnmodifiableRandomAccessList[0]->com.artifact.group.SomRandomDTO["jsonobject"])] with root cause
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONObject and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: org.springframework.data.domain.PageImpl["content"]->java.util.Collections$UnmodifiableRandomAccessList[0]->com.artifact.group.SomRandomDTO["jsonobject"])
当我在getJSONObject中添加@JsonIgnore时,错误就消失了。getJSONObject方法被认为是getter方法,杰克逊也试图序列化它。我想了解杰克逊的这种行为,以及为什么@JsonIgnore正在纠正错误?
在这里,当您返回它作为响应时,您的对象将使用spring的MessageConverter(即Jackson2HttpMessageConverter)bean中使用的对象映射器(ObjectMapper)将其序列化为json字符串。现在,这个错误是由于ObjectMapper如何序列化类引起的。您的类有4个字段,3个类型为字符串,1个类型为JSONObject<代码>ObjectMapper序列化字段时,尝试根据字段类型查找相应的序列化程序。对于已知类型(如String
),有一些现成的序列化器实现,但对于自定义类型,您需要通过set属性的配置向ObjectMapper
bean提供序列化器。FAIL\u ON\u EMPTY\u bean到false。
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
要验证这一点,可以将方法getJSONObject的返回类型更改为String(如下所示),代码将正常工作。
public String getJSONObject throws JSONException {
JSONObject properties = new JSONObject();
properties.put("var1", getVar1());
properties.put("var2", getVar2());
properties.put("var3", getVar3());
return properties.toString();
}
我得到这个错误“嵌套异常是org.springframework.http.converter.HttpMessageConversionException:类型定义错误:[简单类型,类org.json.JSONObject];嵌套异常是com.fasterxml.jackson.databind.exc.InvalidDefitionException:运行项目时,没有为类org.json.JS
有来自web服务的JSON,JSON数组作为响应 在JsonArray中获取响应后,读取Json数组的Json对象时出错: 没有找到JSONObject类org.json.序列化程序,也没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationConfig. Feature.FAIL_ON_EMPTY_BEANS))
我有一个类的数组列表,如下所示: 我想把这个列表写成Json,并尝试了以下代码: 并收到以下错误信息: 找不到类~~~~~的序列化程序,也找不到创建BeanSerializer的属性(为了避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用链:java.util.ArrayList[0])` 我尝试添加但由于未知原因,它使所有Person对象
问题内容: 从Web服务获取Json Array的JSON作为响应 在JsonArray中获取响应后,在读取Json Array的Json对象时出现错误: 找不到针对类org.json.JSONObject的序列化程序,也没有发现创建BeanSerializer的属性(为避免异常,请禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) 问题答案:
无法编写JSON:找不到org.json.jsonObject类的序列化程序,也找不到创建BeanSerializer的属性(为了避免异常,禁用SerializationFeature.fail_on_empty_beans) UserService.getUserList():
问题内容: 从Web服务获取Json Array的JSON作为响应 在JsonArray中获得响应后,在读取Json Array的Json对象时出现错误: 找不到针对类org.json.JSONObject的序列化程序,也没有发现创建BeanSerializer的属性(为避免异常,请禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS)) 问题答案: