在请求正文中使用时配置属性未自动装配?
Configuration properties not autowired when used in request body?
我在我的控制器中使用特定的 class (ClassA) 作为请求主体,但在那个 class 中,我的自动装配 ConfigurationProperties 为空。
控制器:
@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
,即使每个人都标有正确的注释,并且自动装配在整个应用程序的其余部分工作。
有没有可能这根本行不通?
自动装配适用于 Spring 上下文中的对象。在你的请求中, ClassA
对象是从 JSON 解析的,我认为不是从 Spring 上下文中获取的。
您最好更改您的代码,使 ClassA
成为简单的 DTO,并将 ApplicationProperties
注入您的服务 class.
你可以把你的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();
}
}
我在我的控制器中使用特定的 class (ClassA) 作为请求主体,但在那个 class 中,我的自动装配 ConfigurationProperties 为空。
控制器:
@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
,即使每个人都标有正确的注释,并且自动装配在整个应用程序的其余部分工作。
有没有可能这根本行不通?
自动装配适用于 Spring 上下文中的对象。在你的请求中, ClassA
对象是从 JSON 解析的,我认为不是从 Spring 上下文中获取的。
您最好更改您的代码,使 ClassA
成为简单的 DTO,并将 ApplicationProperties
注入您的服务 class.
你可以把你的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();
}
}