Как включить отображение google.protobuf.Timestamp из json в proto в миксине Джексона

Мы работаем в бэкэнд-приложении, в котором мы используем Protobuffers в качестве файлов модели/pojo. Мы должны вызвать API, который возвращает ответ в виде JSON.

message Example{
 string id                    = 1;
 string another_id            = 2;
 int32 code                   = 3;
 string name                 = 4;
 Timestamp date              =5;
}
Now we need to call an API which returns response in JSON:

{
   "json_id":"3",
   "json_another_id":"43",
   "code":34,
   "json_name":"Yeyproto",
   "json_date":"2018-01-01T10:00:20.021-05:00"
}

Я сопоставляю ответ (который находится в json) непосредственно с Proto, используя jackson mixin

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.google.protobuf.Descriptors;
import com.google.protobuf.Timestamp;

import java.time.Instant;
import java.util.Map;

public class ProtobufApp {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = JsonMapper.builder()
                .enable(SerializationFeature.INDENT_OUTPUT)
                .addMixIn(Example.class, ExampleMixin.class)
                .build();

        String json = "{" +
                "\"json_id\":\"3\"," +
                "\"json_another_id\":\"43\"," +
                "\"code\":34," +
                "\"json_name\":\"Yeyproto\"," +
                "\"json_date\":\"2018-01-01T10:00:20.021-05:00\"+
            "}";
        Example deserialised = mapper.readValue(json, Example.class);

        System.out.println(deserialised);

    }
}

abstract class ExampleMixin extends ProtoBufIgnoredMethods {

    @JsonProperty("json_id")
    String id_;

    @JsonProperty("json_another_id")
    String anotherId_;

    @JsonProperty("code")
    int code_;

    @JsonProperty("json_name")
    String name_;

    @JsonProperty("currTime")
    Timestamp currTime_;
}

abstract class ProtoBufIgnoredMethods {
    @JsonIgnore
    public abstract Map<Descriptors.FieldDescriptor, Object> getAllFields();
}

Но он не работает с отметкой времени, и ниже приведена полученная ошибка. Пожалуйста, дайте мне знать любое решение

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot find a (Map) Key deserializer for type [simple type, class com.google.protobuf.Descriptors$FieldDescriptor]

person Avinash Kharche    schedule 11.12.2019    source источник