java - Spring自定义转换器中的@Autowired

标签 java spring spring-mvc

<分区>

我有自定义转换器:

  @Component
public class RoleConverter implements Converter<String, Role> {

    @Autowired private Roles roles;

    @Override
    public Role convert(String id) {
        return roles.findById(Long.parseLong(id));
    }
}

但是@Autowired 正在设置空值。导致 Nullpointerexception

这是角色类:

@Repository
@Transactional
public class Roles extends Domain<Role>{

    public Roles() {
        super(Role.class);
    }

}

我正在使用 Java 配置。转换器已注册:

@Configuration
@EnableWebMvc
//other annotations...
public class WebappConfig extends WebMvcConfigurerAdapter {
//....


    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new RoleConverter());
        super.addFormatters(registry);
    }


/....

}

当我在 Controller 中使用@Autowired Roles 时,它会起作用。

为什么@Autowired 在 Converter 中设置 null?

最佳答案

因为在这里你创建了一个新的RoleConverter对象。相反,您应该 Autowiring RoleConverter

代替

registry.addConverter(new RoleConverter());

使用

@Autowired
RoleConverter roleConverter;

@Override
public void addFormatters(FormatterRegistry registry)
{
    registry.addConverter(roleConverter);

}

关于java - Spring自定义转换器中的@Autowired,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16556480/

相关文章:

eclipse - Spring JBoss Eclipse 中的周转时间

java - Spring + Jackson + 反序列化通用对象列表

java - Spring 集成 Javascript

用于文本 3D 散点图的 Java 库

java - Intellij,如何在我自己的项目中使用.class(无源代码)

java - 调用 Object.getClass() 本身是否使用反射?

Spring 测试框架 - JNDI 资源

javascript - 解决 Spring :messages in javascript for i18n internationalization

java - Spring Web MVC Tiles 异常

java - 如何告诉Java两个通配符类型相同?