iCo*_*ode 64 java json jackson
这可能是重复的.但我无法找到解决问题的方法.
我上课了
public class MyResponse implements Serializable {
private boolean isSuccess;
public boolean isSuccess() {
return isSuccess;
}
public void setSuccess(boolean isSuccess) {
this.isSuccess = isSuccess;
}
}
Run Code Online (Sandbox Code Playgroud)
Eclipse生成getter和setter.
在另一个类中,我将值设置为true,并将其写为JSON字符串.
System.out.println(new ObjectMapper().writeValueAsString(myResponse));
Run Code Online (Sandbox Code Playgroud)
在JSON中,关键是即将到来{"success": true}.
我希望密钥isSuccess本身.Jackson是否在序列化时使用setter方法?如何使密钥成为字段名称本身?
小智 82
这是一个稍晚的答案,但对于访问此页面的其他人可能会有用.
更改Jackson在序列化为JSON时将使用的名称的简单解决方案是使用@JsonProperty注释,因此您的示例将变为:
public class MyResponse implements Serializable {
private boolean isSuccess;
@JsonProperty(value="isSuccess")
public boolean isSuccess() {
return isSuccess;
}
public void setSuccess(boolean isSuccess) {
this.isSuccess = isSuccess;
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其序列化为JSON {"isSuccess":true},但具有不必修改getter方法名称的优点.
请注意,在这种情况下,您还可以编写注释,@JsonProperty("isSuccess")因为它只有单个value元素
小智 18
我最近碰到了这个问题,这就是我发现的.杰克逊将检查您传递给它的任何类别的getter和setter,并使用这些方法进行序列化和反序列化.这些方法中的"get","is"和"set"之后的内容将用作JSON字段的键(getIsValid和setIsValid的"isValid").
public class JacksonExample {
private boolean isValid = false;
public boolean getIsValid() {
return isValid;
}
public void setIsValid(boolean isValid) {
this.isValid = isValid;
}
}
Run Code Online (Sandbox Code Playgroud)
类似地,"isSuccess"将变为"成功",除非重命名为"isIsSuccess"或"getIsSuccess"
在这里阅读更多:http://www.citrine.io/blog/2015/5/20/jackson-json-processor
Fab*_*bio 15
使用下面的两个注释,强制输出 JSON 包括is_xxx:
@get:JsonProperty("is_something")
@param:JsonProperty("is_something")
Run Code Online (Sandbox Code Playgroud)
当您使用 Kotlin 和数据类时:
data class Dto(
@get:JsonProperty("isSuccess") val isSuccess: Boolean
)
Run Code Online (Sandbox Code Playgroud)
@param:JsonProperty("isSuccess")如果您还打算反序列化 JSON,则可能需要添加。
您可以ObjectMapper按如下方式配置:
mapper.setPropertyNamingStrategy(new PropertyNamingStrategy() {
@Override
public String nameForGetterMethod(MapperConfig<?> config, AnnotatedMethod method, String defaultName)
{
if(method.hasReturnType() && (method.getRawReturnType() == Boolean.class || method.getRawReturnType() == boolean.class)
&& method.getName().startsWith("is")) {
return method.getName();
}
return super.nameForGetterMethod(config, method, defaultName);
}
});
Run Code Online (Sandbox Code Playgroud)
小智 7
我不想搞乱一些自定义命名策略,也不想重新创建一些访问器。
代码越少,我就越高兴。
这对我们来说是成功的:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonIgnoreProperties({"success", "deleted"}) // <- Prevents serialization duplicates
public class MyResponse {
private String id;
private @JsonProperty("isSuccess") boolean isSuccess; // <- Forces field name
private @JsonProperty("isDeleted") boolean isDeleted;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35662 次 |
| 最近记录: |