我在 Controller 中使用特定类 (ClassA) 作为请求正文,但在该类中,我的 Autowiring ConfigurationProperties 为 null。
Controller :
@RestController
@RequestMapping(value = "/rest/v1/")
public class XyzController {
@Autowired
ServiceXyz serviceXyz;
@PostMapping(value = "/route")
public void route(@RequestBody ClassA classA) {
serviceXyz.methodAbc(classA);
}
}
服务XYZ:
@Service
public class ServiceXyz {
public boolean methodAbc(ClassA classA) {
return classA.methodA() && otherStuff();
}
}
ClassA.java:
@Component
public class ClassA {
@Autowired
ApplicationProperties applicationProperties;
public boolean methodA() {
return fieldA.equals(applicationProperties.someProperty());
}
}
ApplicationProperties.java:
@Component
@ConfigurationProperties(prefix="stuff")
public class ApplicationProperties {
// etc.
}
在 ClassA.methodA
中,applicationProperties
为 null
,即使每个人都标记了正确的注释,并且 Autowiring 在整个过程中都有效。应用程序的其余部分。
这有可能不起作用吗?
最佳答案
Autowiring 适用于 Spring 上下文中的对象。在您的请求中,ClassA
对象是从 JSON 解析的,我认为并不是从 Spring 上下文中获取的。
您最好更改代码,使 ClassA
成为简单的 DTO,并将 ApplicationProperties
注入(inject)到您的服务类中。
您可以将您的ClassA
更改为此
public class ClassA {
public boolean methodA(ApplicationProperties applicationProperties) {
return fieldA.equals(applicationProperties.someProperty());
}
}
以及您对此的服务:
@Service
public class ServiceXyz {
@Autowired
private ApplicationProperties applicationProperties;
public boolean methodAbc(ClassA classA) {
return classA.methodA(applicationProperties) && otherStuff();
}
}
关于java - 在请求正文中使用时配置属性不会 Autowiring ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52082829/