Я создал простое приложение с 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-файла и образа.