我用 Micronaut 2.0.0 创建了一个简单的应用程序:它是使用 Micronaut 应用程序生成器在https://micronaut.io/launch/生成的,然后我添加了以下内容:
@Controller
public class HelloController {
@Get("/hello")
public Result hello() {
return new Result("Hello world!");
}
}
public class Result {
private final String message;
public Result(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
然后我使用./mvnw clean package
.
当我用 启动它时java -jar target/micronaut-minimal-1.0.jar
,它成功启动。它正确响应:
$ curl http://localhost:8080/hello
{"message":"Hello world!"}
现在我构建一个原生镜像:
native-image -jar target/micronaut-minimal-0.1.jar target/app
然后我运行它:
target/app
它开始正常。
现在同样的请求产生了一个错误:
$ curl http://localhost:8080/hello
{"message":"Internal Server Error: Error encoding object [com.example.Result@7f21a9858b70] to JSON: No serializer found for class com.example.Result and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)"}
我尝试添加@JsonProperty
到message
字段或getMessage()
方法(带或不带value
属性),但无济于事。
我认为这与反射可能在本机图像中不可用的事实有关。但是我该如何解决这个问题呢?
我正在使用 GraalVM CE 20.1.0(构建 11.0.7+10-jvmci-20.1-b02)来运行和构建 jar 和图像。