我正在尝试制作一个新的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