Java 如何在Jackson mixin中启用从json到proto的google.protobuf.Timestamp映射

Java 如何在Jackson mixin中启用从json到proto的google.protobuf.Timestamp映射,java,json,jackson,jackson-databind,proto,Java,Json,Jackson,Jackson Databind,Proto,我们在一个后端应用程序中使用Protobuffers作为model/pojo文件。我们必须调用以JSON形式返回响应的API message Example{ string id = 1; string another_id = 2; int32 code = 3; string name = 4; Timestamp date =5

我们在一个后端应用程序中使用Protobuffers作为model/pojo文件。我们必须调用以JSON形式返回响应的API

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"
}
我使用jacksonmixin将响应(json格式)直接映射到Proto

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]