我正在尝试制作一个新的X实体,该实体与我的User实体有关系。当某人发布一个新的X实体时,我正在制作一个“ XForm”,以验证结果,等等。如果一切都有效,则在“执行”方法中,我试图基于userRepository查找用户。 id,来自表单。

package app.form;

public class XForm {

@Autowired
private UserRepository userRepository;

private long userId;
//[.. other fields + getters and setters]

public X execute() throws Exception {
    X myX= new X();
    Optional<User> user = userRepository.findById(getUserId());
    if (!user.isPresent()) {
        throw new Exception("User not found");
    }
    myX.setUser(user.get());
    return myX;

}


并且userRepository为null。我试图用@ Component,@ Service等注释它,但它仍然为null。如您所见,我也不打算创建“新的” UserRepository。自动连接存储库在其他任何地方(在控制器和身份验证处理程序等中)都可以正常工作。

这是控制器:

public ResponseEntity<Object> testNewAction(@RequestBody @Valid XForm form,
                                         BindingResult result) {
    try {
        if (isValid(result)) {
            X myX = form.execute();
            XRepository.save(myX);
            //return success json
        }
        //return form errors json
    } catch (Exception ex) {
        //return exception json
    }
}


基本应用程序类如下所示,我也确保对其进行了扫描(app.form):

@SpringBootApplication
@ComponentScan(basePackages = {"config", "app"})
@EntityScan(basePackages = {"app.entity"})
@EnableJpaRepositories(basePackages = {"config", "app"})
@EnableTransactionManagement
public class Application {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(Application.class);
        app.run(args);
    }
}


我究竟做错了什么?

最佳答案

您的问题是XForm不是作为Spring bean创建的,而是作为普通Java对象创建的。在这种情况下,您可以将类设置为@ Configurable,Spring会在您调用new时实例化该实例。以下是操作方法示例:https://sichernmic.blogspot.com/2015/04/use-of-configurable-annotation.html

10-06 06:40