我已经编写了整型适配器,并用作注释来实现以下输出,但在gson库中编写的代码完全不允许使用注释配置进行空处理。
如果我取消注释1,2,4行和注释3行,那么我仍然没有实现我的愿望输出。
当我调试第189行的库代码(给定的屏幕截图)时,没有到达我的自定义适配器代码,因此空处理无法使用注释。有没有其他方法可以根据注释配置实现所需的输出?
期望输出:
@AllArgsConstructor
@Getter
@Setter
class CatDetails {
private String name;
private String breed;
private String email;
//@JsonAdapter(EmptyIfNullIntegerTypeAdapter.class) //1
private Integer catlives;
//@JsonAdapter(EmptyIfNullIntegerTypeAdapter.class) //2
private Integer phone;
private String city;
private Integer rank;
private Boolean likesMice;
}
public class EmptyIfNullIntegerTypeAdapter extends TypeAdapter<Integer> {
@Override
public void write(JsonWriter out, Integer value) throws IOException {
if (value == null) {
out.value("");
return;
}
out.value(value);
}
@Override
public Integer read(JsonReader in) throws IOException {
if (in.peek() == JsonToken.NULL) {
in.nextNull();
return 0;
}
return in.nextInt();
}
}
public class MyApp {
public static void main(String... args) {
CatDetails user = new CatDetails("cat007", "YUI", "abc.cat@gmail.com", null,89, "new",null, true);
Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(Integer.class, new EmptyIfNullIntegerTypeAdapter()).create(); //3
//Gson gson = new GsonBuilder().setPrettyPrinting().create(); //4
String json = gson.toJson(user);
System.out.println(json);
}
}
Currently code giving below Output:
{
"name": "cat007",
"breed": "YUI",
"email": "abc.cat@gmail.com",
"catlives": "",
"phone": 89,
"city": "new",
"rank": "",
"likesMice": true
}
查看以下带有注释的输出:
特别注意两个整数字段(猫命)
{
"name": "cat007",
"breed": "YUI",
"email": "abc.cat@gmail.com",
"catlives": "",
"phone": 89,
"city": "new",
"likesMice": true
}
您需要将@JsonAdapter#nullSafe
设置为false
,否则默认情况下,Gson会使指定的适配器为空安全。例如:
@JsonAdapter(value = EmptyIfNullIntegerTypeAdapter.class, nullSafe = false)
private Integer catlives;
我是Spring的新手,我很困惑@CreatedDate注释在实体中是如何工作的。 我做了一次谷歌搜索,有很多解决方案,但除了一个,没有一个适合我。我很困惑为什么? 这是我先试的 它不起作用。我为列中的值获取了NULL。 然后我做了这个。 这实际上将时间戳存储在db中。我的问题是,我遵循的大多数教程都建议我不需要来获取当前时间戳。看起来我确实需要它。我缺少什么吗?
错误在此输入图像描述 我试图发送事件的通知,当一些喜欢和评论他的帖子,通知评论和喜欢在这里工作是我的通知类。 我的控制器功能代码,用于通知评论 我的请求
我试图让RunWith(PowerMockRunner.class)处理我现有的包注释。 版本: Powermock 1.4.12 mockito 1.9.0 jUnit 4.8.2 package-info.java//这是包注释 测试说明。java//这是包“com.smin.dummy”的元数据注释类 A、 爪哇 莫卡。Java语言 在unitest MockA中。如果我不使用RunWith
环境:科特林 1.5.30, 春靴 2.5.4(Spring 5.3.9) 我试图创建一个组合注释来简化类似的模板注释代码。注释类如下: 预期用法: application.yaml: 但在应用程序启动后,TheBean 未按预期注册。 > 首先,我在github spring存储库中搜索,发现了这个:回归:自定义组合@Profile注释,组件扫描不再支持没有运行时保留。所以我试图但没有效果。 尝
问题内容: 我的主要课程是 控制器 JSP页面 为什么对象字段未通过AddressForm验证? 请帮忙。 问题答案: 您需要用注解装饰的成员。请参阅《JSR 303:Bean验证》的 3.1.3和3.5.1节。正如我在对问题“ 是否存在使用注释方法启用JSR 303 Bean验证的标准方法”的 回答中所解释的那样,这是根据JSR 303 真正使用注释的方式。 编辑 示例代码:Hibernate
Spring参考文档说明如下: ComponentScanPackageMarker类故意省略了@Configuration注释。我已经测试了组件扫描和自动连接功能。令我吃惊的是,一切都很顺利: 组件扫描的这种行为是故意的吗?为什么即使没有@Configuration注释也能工作?