gpt4 book ai didi

java - 在请求正文中使用时配置属性不会 Autowiring ?

转载 作者:行者123 更新时间:2023-12-02 10:52:11 25 4
gpt4 key购买 nike

我在 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 中,applicationPropertiesnull,即使每个人都标记了正确的注释,并且 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com