当前位置: 首页 > 知识库问答 >
问题:

序列化重载输出

司空宣
2023-03-14

我有一个API,它正在被扩展,以供另一个系统使用。存在Pre-req,每个前端对一个json字段有不同的期望。

示例:响应字段“amount”必须是字符串或int,这取决于我从下游接收的值。因此,在某些情况下,我将在json中返回字符串值,而在其他情况下,我将返回int。

预期的json产出:

{
    "amount": 21
}

{
    "amount": "21"
}

我已经做了以下工作:

class Response {

    @JsonProperty("amount")
    private int amount;
    
    @JsonProperty("amount")
    private String amountString;

// Getters and setters

我希望能够为json字段“amount”返回int或String值,但出现以下错误:

通用域名格式。fasterxml。杰克逊。数据绑定。JsonMappingException:属性“amount”的getter定义冲突

任何帮助都将不胜感激

共有3个答案

翟淮晨
2023-03-14

是的,这不适用于类型化的返回值。

除非你可以提供2个具有不同返回类型的endpoint,否则你可以返回一个普通的Map

public Map<String, Object> awkwardMethod(boolean wantString) {
  Response response = new Response();
  ... // do business logic
  return Map.of("amount", wantString ? String.value(response.amount) : response.amount);
}

明确地说:我不鼓励您这样做,因为您将丢失返回值的类型信息,并引入容易出错的手动映射。我只是为一个问题提供了一个解决方案,这个问题应该通过提供一个清晰的API和坚持这个API的客户端来解决。

漆雕宏浚
2023-03-14

我想你只要返回字符串类型,在javascript上解决问题就可以了

魏松
2023-03-14

你不能那样做。JSON中的元素称为amount,不能将其绑定到两个不同的变量。

之所以出现此异常,是因为@JsonProperty(“amount”)用于两个单独的类字段。

最好创建两个不同的响应:

示例:

class FrontEndResponse1 {

    @JsonProperty("amount")
    private int amount;

   //getter/setter
    
}

class FrontEndResponse2 {

    @JsonProperty("amount")
    private String amount;

    //getter/setter
    
}
 类似资料:
  • 问题内容: 大家好,我对json的实作性有疑问。我正在Unity下使用Json.NET包:我正在搜索一个数据库,该数据库可在我的应用程序上编辑,并通过wwwForm和php文件存储在服务器上。我毫不费力地创建它并将其推向网络。问题是,当我加载它时,数据库最后有一个新条目。数据库类是这样的: 要序列化和反序列化,我使用这两种方法: 使用默认构造函数(序列化和反序列化)的结果是: 有2个军队和2个单位

  • 如何用gson 2.2.4序列化和反序列化像这样的简单枚举?

  • 我在搞lambdas的Java序列化。 我有两个完全独立的项目,其中只有一个类。 项目1: 项目二: 但是,在尝试反序列化可运行文件时,它会抛出一个异常,说它找不到 ...我有什么办法可以避免这种情况吗?

  • 问题内容: 我有一个WCF服务定义如下: 所述类的定义为: ILayoutService的实现如下: 我实现了,所以我可以得到将被(反)序列化的原义JSON。我正在使用它来测试通过jQuery调用此服务: 返回的布局是VB代码中调用返回的确切JSON 。出于某种原因,当我调用Web服务,输入参数在什么都不是。反序列化一定会失败。知道为什么吗? 问题答案: 仅凭您提供的细节很难分辨。 这是我的建议:

  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 在一个涉及光学摄像机通信(OCC)的研究项目中,我需要主动分析视频帧,我目前正在我的pc上使用python和opencv进行离线分析(我用智能手机录制视频,然后进行处理)。我想用我的三星galaxy A40上的相机现场处理视频。我对android开发相当陌生,所以我只想创建一个用于捕获视频并将其传输到我的pc上进行分析的基本应用程序。我的应用程序要求在30 fps或更高的速度下捕获1080p。 任