Spring restful API如何以真正的JSON格式而不是字符串返回JSON格式字符串

时间:2017-04-14 05:41:30

标签: json spring rest

我正在使用Spring编写restful API。 API如下所示,列出了其类型的所有对象。

http://192.168.1.100:8021/some/api/v3/someobjs

DTO如下所示

public class SomeDTO {

  @NotBlank
  @Size(min = 1, max = 32, message = "Name size must be between 1 and 32.")
  private String name;

  @NotBlank
  @Size(min = 1, max = 4000, message = "Info size must be between 1 and 4000.")
  private String info;

  // Setter & Getter
}

" info" value可以是JSON格式字符串。所以,我得到的可能是这样的:

{
  "name": "wpdfw",
  "info": "{\n    \"indexName\": \"wpdfw\", \n    \"urls\": [\n        \"https://www.example.com/l2/api/v1\", \n        \"https://www.example.com/l3/api/v1\"\n    ], \n    \"regions\": [\n        \"wp.*.*\", \n        \"wf.*.*\"\n    ], \n    \"policy\": \"equal\"\n}"
}

但是,我想要" info"要使用真正的JSON格式而不是字符串:

{
  "name": "wpdfw",
  "info": {
    "indexName": "wpdfw",
    "urls": ["https://www.example.com/l2/api/v1", "https://www.example.com/l3/api/v2"],
    "regions": ["wp.*.*", "wf.*.*"],
    "policy": "equal"
  }
}

请注意JSON格式" info" value可以是任何未知的JSON层次结构。 我该怎么办?

1 个答案:

答案 0 :(得分:1)

您的问题与this one类似。

检查具有的@JsonRawValue @Target(value={ANNOTATION_TYPE,METHOD,FIELD})

@JsonRawValue public String getInfo() { return info; }

Spring Rest使用Jackson库序列化为JSON。

根据您在类路径中的库,您可以使用Jackson v1或v2。

同时检查this link,它可以帮助您使用杰克逊注释的其他示例。