Использование JSon библиотеки Джексона в Java, можно сделать следующее:Java jackson как развернуть необработанное значение во время сериализации?
public class MyObject {
@JsonRawValue
@JsonUnwrapped
private String rawJson;
}
public class DTO {
public MyObject json;
}
Пример rawJson:
{
"key": "value"
}
Когда DTO сериализации и визуализируется как JSON, я хочу JSON в просто выглядеть следующим образом:
{
"dto": {
"key":"value"
}
}
Вместо этого он всегда:
{
"dto":{
"rawJson":{
"key":"value"
}
}
}
По существу, кажется, что когда одно из ваших свойств является значением JSON, хранящимся в строке с @JsonRawValue, @JsonUnwrapped не работает.
Идеально я ищу сериализационное решение на уровне класса MyObject, а не DTO, иначе мне пришлось бы применять решение не только для DTO, но и для всех других DTO, на которые ссылается MyObject.
Update:
Ниже ответ решил эту проблему в одном месте, но по-прежнему является проблемой в следующем сценарии;
public class DTO2 {
@JsonUnwrapped
public MyObjectAbstract json2;
}
Где MyObject является продолжением MyObjectAbstract, и когда DTO2 MyObjectAbstract является экземпляром MyObject Я хотел бы DTO2 просто сериализовать как:
{
"key": "value"
}
Вопрос заключается в том, что всякий раз, когда DTO2.MyObjectAbstract является экземпляром MyObject это сериализовать как:
{
"json": {
"key": "value"
}
}
Это решило мою проблему в одном случае, когда я в конце концов сделал хотите { "JSON": { "ключ": "значение"}}, но что если бы у меня был другой ссылочный объект DTO2, который я хочу просто сериализовать как {«ключ»: «значение»}. Я уточнил вопрос с деталями. –
По аналогии вы можете добавить геттер с аннотацией JsonValue к классу DTO2. –
Есть ли какое-либо решение, которое не требует каких-либо изменений в классах, ссылающихся на этот объект? Моя забота заключается в том, что в будущем этот класс потенциально может упоминаться во многих местах, что делает его не идеальным для использования логики логики сериализации везде, где на нее ссылаются. –