У меня есть класс:
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 из строки.
- Я получаю эту странную дополнительную обратную косую черту для escape-символа. Я не вижу этого при отладке и выполнении этой строки: mapper.writeValueAsString(schema). Но я вижу обратную косую черту и дополнительные кавычки после того, как я установил свойство.
Есть идеи, как их решить?
JsonSchema
объект кодируется два раза. Первый раз кодируется непосредственно вами:mapper.writeValueAsString(schema)
. Второй раз он кодируется Spring. Измените тип сString
наObject
-Object configuration;
и в контроллере просто установите его без дополнительной сериализации:settingPojo.setConfiguraton(schema);
- person Michał Ziober   schedule 06.07.2021