Я пытаюсь преобразовать объект protobuf в формат JSON, используя com.googlecode.protobuf.format.JsonFormat
, но тип map
получился неожиданным.
Мое сообщение такое
message Response {
repeated Candidate candidates = 1;
map<string, ErrorMessage> errors = 2;
}
message ErrorMessage {
string message = 0;
ErrorType type = 1;
}
enum ErrorType {
ERROR = 0;
WARNING = 1;
}
Проблема заключается в формате JSON объекта Response
, который я создал.
Response response = ...
Return new ResponseEntity<>(new JsonFormat().printToString(response), HttpStatus.OK);
Я ожидаю, что ошибки будут отформатированы как карта с ключом строкового значения (ключа карты)
...
"errors": {
"someID" : {
"message": "blah blah",
"type": "ERROR"
}
}
Однако фактический вывод (я оценил только часть new JsonFormat().printToString(response)
в intellij)
...
"errors": {
"key": "someID",
"value": {
"message": "blah blah",
"type": "ERROR"
}
}
Я надеюсь, что это какая-то небольшая конфигурация, которую я пропустил, чтобы protobuf (или Джексон?) знал фактическое значение ключа? не используя «ключ» и «значение».
Кстати, какой смысл иметь буквальное поле «ключ» и «значение» в типе map
? Вы не можете выполнять поиск составляющих с ним, и вы можете просто использовать пользовательский тип/объект.