必需:GeneratedMessageV3.Builder<*>:如何使用值初始化 com.google.type.Money

Required: GeneratedMessageV3.Builder<*>: how initialize com.google.type.Money with a value

上下文:我想设计一个包含将在 gRPC 服务响应中使用的货币字段的原型文件。我正在尝试关注 this tutorial

我收到这个错误

Type mismatch.
Required:
GeneratedMessageV3.Builder<*>!
Found:String

它明明说我必须使用 GeneratedMessageV3.Builder 但我不知道该怎么做。

这是原型

syntax = "proto3";

    package com.mycomp.adapters.grpc.test;
    
    import "google/api/annotations.proto";
    import "google/type/money.proto";
    
    service TestService {
    
      rpc GetTest (GetTestRequest) returns (Test) {
      }
    }
    
    message GetTestRequest{
        string id_cliente = 1;
    }
    
    message Test {
      string id_cliente = 1;
      google.type.Money test_money = 2;
    }

我是如何实现该服务的以及我的问题来初始化一个非常简单的 com.google.type.Money 变量。

import com.google.type.Money
...other imports

@Singleton
class TestEndpoint() : TestServiceGrpcKt.TestServiceCoroutineImplBase() {

    override suspend fun getTest(request: GetTestRequest): Test {

        val test = Test.newBuilder()

        ...
        
        test.testMoney = Money("999.99") //*** certainly my mistake is here

        return test.build()
    }

如果相关,这里是 build.gradle

最重要的部分
dependencies {
    implementation("io.micronaut:micronaut-validation")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
    implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
    implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
    implementation("io.micronaut:micronaut-runtime")
    runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")

    implementation("io.micronaut:micronaut-http-client")
    
    implementation ("com.google.api.grpc:proto-google-common-protos:1.0.0")
}

我了解在 proto 文件中使用 import "google/api/annotations.proto" 并在 Kotlin 中使用 import com.google.type.Money 所需的唯一依赖项是

com.google.api.grpc:proto-google-common-protos:1.0.0

如果我正确解释 the javadoc,您不能直接实例化 Money class。而是使用类似的东西:

test.testMoney = Money.newBuilder()
    .setCurrencyCode("USD")
    .setUnits(999)
    .build();