我尝试使用一些类似于以下内容的JSON(来自AlphaVantage):
{
"Symbol": "IBM",
"AssetType": "Common Stock",
"Name": "International Business Machines Corporation",
... more properties
}
并使用Jackson解析它(
ObjectMapper objectMapper = new ObjectMapper();
String json = response.body().string();
Stock stock = objectMapper.readValue(json, Stock.class);
stock.save();
我的股票类如下所示:
@Entity
@Table(name = "stock")
public class Stock extends Model {
@Id
private Long id;
private String Symbol;
private String AssetType;
private String Name;
... other properties
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getSymbol() {
return this.Symbol;
}
public void setSymbol(String Symbol) {
this.Symbol = Symbol;
}
... other setters/getters
}
相反,我得到了以下错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Symbol" (class com.myprojectname.Stock), not marked as ignorable (60 known properties: "ebitda", "sharesOutstanding", "bookValue", ....more fields
为什么Jackson在连接到我的股票类时遇到问题?如何将JSON中的符号连接到Stock类中的符号?
编辑:如果我将符号更改为小写,我会收到相同的错误消息:
@Entity
@Table(name = "stock")
public class Stock extends Model {
@Id
private Long id;
private String symbol;
public String getSymbol() {
return this.symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
}
您还可以将ObjectMapper
配置为仅检查字段并忽略getter:
JsonMapper mapper = JsonMapper.builder()
.visibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
.visibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE)
.build();
将属性的名称从Symbol
更改为符号
不会有帮助,因为我们在json文件中仍然有Symbol
。
您可以尝试使用示例中的@JsonProperty
注释。对于“Symbol”
json字段,它可以如下所示:
//...
private String Symbol;
@JsonProperty("Symbol")
public String getSymbol() {
return this.Symbol;
}
@JsonProperty("Symbol")
public void setSymbol(String symbol) {
this.Symbol = symbol;
}
// ...
这种方法也适用于与json对应的大小写字母不同的其他字段。
编辑:就像我上面评论中链接的问题的答案一样——转述一下:
由于setter方法名为setSymbol()
Jackson假定变量名为symbol
,因为Java命名约定(变量应以小写字母开头)。
编辑(2):其他选项将利用对象映射器配置。因此,您可以使用此处的方法,而不是注释方法,并使映射器不区分大小写:
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
我发现其他有用的属性是:
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
在上面链接的Baeldung的文章中描述
我遇到了反序列化问题: 这是我的班级: 我要反序列化的JSON是: 我得到以下例外: 我不想补充: 因为我想得到ResObj... 如果我添加注释,它会通过,但会将其设置为null。。这是我不想要的。
当我尝试反序列化汽车类时,我得到了下面的错误。杰克逊正试图在父类中的子元素中搜索字段。我如何确保杰克逊使用适当的子类型进行反序列化?我相信我需要使用混合/客户转换器。但我不确定如何在这个特定场景中使用它们。 注意:在我的例子中,除TestMain之外的所有类都在一个jar文件中,我不能修改源文件。 错误 线程"main"中的异常com.fasterxml.jackson.databind.exc.
问题内容: 我使用杰克逊将JSON转换为Object类。 JSON: 对象类别: 码: 我的代码抛出这样的异常: 而且我不想在Test类上添加一个道具,我只是想让jackson转换Test中也存在的存在值。 问题答案: Jackson提供了几种不同的机制来配置“额外” JSON元素的处理。以下是将to 配置为not 的示例。 有关其他方法,请参见http://wiki.fasterxml.com/
将字符串反序列化为对象时遇到错误。 org.opentest4j.MultipleFailuresError:多个失败(2失败)com.fasterxml.jackson.databind.exc.Invalid定义异常:无法构建的实例(没有Creator,像默认构造一样,存在):没有String-参数构造函数/工厂方法从String值反序列化('2020-05-20')at[来源:(字符串) J
我正在尝试使用fasterxml将json应答解析为POJO。但问题是,json回复包含嵌套的对象,其中包含反斜杠,所以在ObjectMapper读取该值时,我收到了com。fasterxml。杰克逊。数据绑定。exc.不匹配计算异常 我不知道如何用fasterxml解析这个对象?! 我的POJO对象模型如下所示: 我收到的原始json消息: “交易/报价/BTC-PLN-BTC-C-C-PLN,
我正在使用Jackson序列化我的JavaPOJO类。除了字段之外,我JavaPOJO,我想在JSON中添加一些附加信息我正在编写自己的自定义。如果我使用这个类并注册到,那么我会得到错误: 我无法理解这里可能出了什么问题。如果我删除自定义注册模型,那么一切都可以完美运行。 有人能让我知道这个问题的可能原因吗?我目前使用的是Jackson 2.13.2最新版本依赖项:: 以下是示例代码: 我想知道上