杰克逊代表的Java String作为Json的数字或字符串

问题描述:

我有以下的java类,例如说员工杰克逊代表的Java String作为Json的数字或字符串

class Employee{ 
     String empId; 
} 

当我序列使用杰克逊对象映射这个java类,我得到的样品JSON输出的,如果雇员ID为123

{ 
"empId":"123" 
} 

什么,我需要的是下面的输出,如果EMP标识纯粹是一些比方说123

{ 
"empId":123 
} 

而且,如果员工ID为“A123”

{ 
"empId":"A123" 
} 

我可以写一个自定义序列化类,并与自定义序列化注释EMPID但与许多大面积物体的代码库这样做,这是一个繁琐的过程。

不杰克逊带有任何现成的功能检查,如果字符串是一个数字,那么其表示为编号或者在序列化过程中它表示为字符串,类似的事情写号的字符串功能

请让我知道你的建议。

+0

为什么不只是在你的客户端上处理这个特殊情况呢?而不是在服务器上做很多工作? – Lino

+0

对不起,这不能在客户端完成。这就是我们试图在服务器上执行此操作的原因。 – user1843883

+0

但是什么原因,用例,你需要2种不同的数据类型? – Lino

你的例子在基础知识中是错误的。

您可以尝试针对数据类型的主体。

您如何看待客户端可以区分字段“empId”的值类型?

it 必须有一个类型 - 字符串或数字。期。

否则,它是客户端解析器的屁股很大的痛苦。相同的JSON结构不能被解析时,一个实例相同的字段是一个字符串,而其他的它是一个数字。

+0

消费者已经在消费传统服务。对于上面提到的情况,消费者可能只是使用字符串,并且结束了这种情况的问题。但是,如果我有字段的字符串返回类型,并且在字符串返回类型中填充的值是一个数字,那么旧服务就有一个功能(bug)来检测它是字符串还是数字。一些使用此服务的消费者可能会将此值用作字符串,而其他人可能会将此值用作数字。我不想因为遗留服务中的这个功能(错误)而中断任何一位消费者。 – user1843883

+0

非常糟糕的做法...无论如何,没有任何公共工具可以执行某些与规范相关的事情来满足任何可能的错误,错误和不良设计,人们可以制作。 – Vadim

+0

同意您的意见 – user1843883