我现在可以序列化@ConfigMapping吗
Нow can i serialize @ConfigMapping
我在 Quarkus 中有一个包含 3 个文件的项目
application.properties
conf.obj[0].name=name0
conf.obj[0].code=code0
conf.obj[0].versions[0].number=1
conf.obj[1].name=name1
conf.obj[1].code=code1
conf.obj[1].versions[0].number=1
conf.obj[2].name=name2
conf.obj[2].code=code2
conf.obj[2].versions[0].number=1
conf.obj[2].versions[1].number=2
AvailableConfig.java
package com.example;
import io.quarkus.runtime.annotations.StaticInitSafe;
import io.smallrye.config.ConfigMapping;
import java.util.List;
@StaticInitSafe
@ConfigMapping(prefix = "conf")
public interface AvailableConfig {
List<listObject> obj();
interface listObject {
String name();
String code();
List<Version> versions();
interface Version {
Integer number();
}
}
}
MainService.java
package com.example;
import io.quarkus.runtime.StartupEvent;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.json.bind.Jsonb;
import java.util.List;
@ApplicationScoped
public class MainService {
@Inject
AvailableConfig availableConfig;
@Inject
Jsonb jsonb;
void onStart(@Observes StartupEvent ev) {
List<AvailableConfig.listObject> config = availableConfig.obj();
String result = jsonb.toJson(config);
}
}
作为执行的结果,创建了正确的对象“config”。
但是序列化的时候,得到一个空的json "[{},{},{}]"
如何正确序列化这样的东西?
我不知道为什么 jsonb 会这样,但我找到了几个解决方案:
1. 使用 Gson
Gson gson = new Gson();
String resultGson = gson.toJson(config);
2. 使用杰克逊
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
String resultJackson = objectMapper.writeValueAsString(config);
但我不确定这些选项是否适用于 AOT-compilation 在 Quarkus 环境中。
3. 所以,最好的办法就是不要把这些东西放在config格式里,最好放在你的json-file.
我在 Quarkus 中有一个包含 3 个文件的项目
application.properties
conf.obj[0].name=name0
conf.obj[0].code=code0
conf.obj[0].versions[0].number=1
conf.obj[1].name=name1
conf.obj[1].code=code1
conf.obj[1].versions[0].number=1
conf.obj[2].name=name2
conf.obj[2].code=code2
conf.obj[2].versions[0].number=1
conf.obj[2].versions[1].number=2
AvailableConfig.java
package com.example;
import io.quarkus.runtime.annotations.StaticInitSafe;
import io.smallrye.config.ConfigMapping;
import java.util.List;
@StaticInitSafe
@ConfigMapping(prefix = "conf")
public interface AvailableConfig {
List<listObject> obj();
interface listObject {
String name();
String code();
List<Version> versions();
interface Version {
Integer number();
}
}
}
MainService.java
package com.example;
import io.quarkus.runtime.StartupEvent;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import javax.json.bind.Jsonb;
import java.util.List;
@ApplicationScoped
public class MainService {
@Inject
AvailableConfig availableConfig;
@Inject
Jsonb jsonb;
void onStart(@Observes StartupEvent ev) {
List<AvailableConfig.listObject> config = availableConfig.obj();
String result = jsonb.toJson(config);
}
}
作为执行的结果,创建了正确的对象“config”。 但是序列化的时候,得到一个空的json "[{},{},{}]"
如何正确序列化这样的东西?
我不知道为什么 jsonb 会这样,但我找到了几个解决方案:
1. 使用 Gson
Gson gson = new Gson();
String resultGson = gson.toJson(config);
2. 使用杰克逊
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
String resultJackson = objectMapper.writeValueAsString(config);
但我不确定这些选项是否适用于 AOT-compilation 在 Quarkus 环境中。
3. 所以,最好的办法就是不要把这些东西放在config格式里,最好放在你的json-file.