Ren*_*Ren 18 java json annotations jackson
我在对象映射器上使用Jackson的readValue()方法从JSON文件中读取并将其转换为我的java对象.
例如.
mapperObject.readValue( node, MyTargetClass.class )
Run Code Online (Sandbox Code Playgroud)
我可以在MyTargetClass上设置任何注释来强制执行必需的属性吗?例如,如果我有一个带有属性ABC,DEF和GHI的JSON对象,我的Json就是以下内容
{
"ABC" : "somevalue"
"DEF" : "someothervalue"
}
Run Code Online (Sandbox Code Playgroud)
我希望它以某种方式失败,只有在包含ABC,DEF和GHI的readValue上才能成功.
Sta*_*Man 15
杰克逊不包括验证功能,这是设计的(即被认为是超出范围).但通常使用的是Bean Validation API实现.关于这一点的好处是数据格式处理和验证逻辑之间的分离.这就是DropWizard使用的框架; 这就是JAX-RS(如泽西岛)为JAX-RS 2.0提供服务的方向.
pos*_*ist 11
您可以根据需要使用@JsonProperty(required = true)注释标记属性,如果属性缺失或为null,它将在反序列化期间抛出JsonMappingException.
编辑:我收到了一个没有评论的downvote.我很想知道为什么,因为它确实是正确的.
如果要确保提供 json 字段,则必须使用@JsonProperty(value = "fieldName", required = true)注释作为构造函数的参数。但这还不够,构造函数还应该有@JsonCreator注释。
例如,如果您有一个名为“ endPoint”的字段,并且希望确保 JSON 文件中提供了该字段,那么如果未提供该字段,以下代码将引发异常。
@JsonCreator
public QuerySettings(@JsonProperty(value = "endPoint", required = true) String endPoint) {
this.endPoint = endPoint;
}
Run Code Online (Sandbox Code Playgroud)
我发现此链接有助于理解 Jackson 注释。它还很好地解释了为什么 required=true 是不够的,并且与其名称相反。
| 归档时间: |
|
| 查看次数: |
21928 次 |
| 最近记录: |