【发布时间】:2021-07-02 22:43:22
【问题描述】:
我有一堂课:
class Setting {
String configurationName;
String configuration;
}
我想返回字符串表示配置的样子。根据某些条件,这可能是不同的对象。
在下面的一项服务中:
@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response getConfigurationSetting ()
{
try {
Setting settingPojo = new Setting();
settingPojo.setCOnfigurationName("DataBase");
ObjectMapper mapper = new ObjectMapper();
SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
mapper.acceptJsonFormatVisitor(OracleConfiguration.class, visitor);
JsonSchema schema = visitor.finalSchema();
settingPojo.setConfiguraton(mapper.writeValueAsString(schema));
return Response.status(HTTP.CodeOK).entity(settingPojo).build();
} catch (Exception ex) {
// exception logic
}
}
可以有不同的类,像这样:“MySQLConfiguration.class”。
示例:
{
configurationName : "DataBase",
configuration: "{
\"type\":\"object\",
\"id\":\"urn\":\"jsonschema\":\"database\":\"model\":\"OracleConfiguration\",
\"properties\":{
\"numberOfConnection\":{
\"type\":\"integer\"
},
\"connectionDate\":{
\"type\":\"integer\",
\"format":\"utc-millisec\"
},
\"isconnected\":{
\"type\":\"boolean\"
}
}
}"
}
上述输出的问题:
- 我想从字符串中删除 id 属性。
- 我得到了一个奇怪的额外反斜杠作为转义字符。在调试和执行这一行时我没有看到这一点:mapper.writeValueAsString(schema)。但是我在设置属性后看到了反斜杠和额外的引号。
知道如何解决这些问题吗?
【问题讨论】:
-
停止对 JSON 进行双重编码。
-
@chrylis-cautiouslyoptimistic- 感谢您的回复.. 没有得到你.. 你是什么意思停止双重编码 json?我想向用户展示该类将是什么数据类型
-
JsonSchema对象被编码两次。第一次由您直接编码:mapper.writeValueAsString(schema)。第二次由 Spring 编码。将类型从String更改为Object-Object configuration;并在控制器中设置它而无需额外的序列化:settingPojo.setConfiguraton(schema);
标签: java json jackson jsonschema json-serialization