【发布时间】:2016-01-11 03:31:59
【问题描述】:
我正在尝试在 Jackson 的 JsonSerializer<> 中注入 @RequestScoped 对象类:
public class DigitalInputSerializer extends JsonSerializer<DigitalInput>
{
@Inject private UserRequestResources user;
@Override
public void serialize(DigitalInput value, JsonGenerator gen,
SerializerProvider serializers) throws IOException,
JsonProcessingException {
gen.writeStartObject();
gen.writeStringField("user", this.user.getMe().getUser());
在最后一行,this.user 是 null。
@RequestScoped
public class UserRequestResources
{
这个对象类在项目的其他地方被解析。 我正在使用 Wildfly 8 J2EE 实现。
编辑:
我有一个配置杰克逊映射器的主要资源:
@ApplicationScoped
public class SerializationApplicationResources
{
protected ObjectMapper mapper;
@PostConstruct
protected void initialize_resources() throws IllegalStateException
{
this.mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(DigitalInput.class, new DigitalInputDeserializer());
module.addSerializer(DigitalInput.class, new DigitalInputSerializer());
为了使用它,我只用@Inject 注释我的字段,然后我有一个实例。
@Inject protected SerializationApplicationResources jacksonResources;
那么,
this.jacksonResources.getMapper().writeValueAsBytes(entity);
【问题讨论】:
-
你的
DigitalInputSerializer类的范围是什么? -
我不明白为什么这应该起作用,JsonSerializer 不是服务器管理的资源,您可能没有手动将其转换为命名 bean。
-
如何获得
DigitalInputSerializer类型的对象?如果您自己构建它们,请将UserRequestResources的注入实例传递给DigitalInputSerializer。如果没有,则将DigitalInputSerializerCDI 托管并在使用它的类中注入DigitalInputSerializer。 -
请参阅编辑后的帖子。我有一个主要的对象类。
标签: java jakarta-ee jackson cdi