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

标签 java spring spring-boot inversion-of-control

我在 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/

相关文章:

java - Objective-C 相当于 Java 枚举或 "static final"对象

java - 在 Spring 中实现 If-Match HTTP header

java - 将自定义 UserDetailsS​​ervice Autowiring 到 AbstractAuthenticationProcessingFilter

java - 为什么 @JacksonXmlProperty 在使用 Kotlin 的 Spring Boot 中忽略参数?

java - 网 bean 8.2 : Is restarting a project required to see changes?

java - 类转换异常 : com. sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

java - 在字符串中存储连接字符串

java - Spring Boot 中定义的 REST API 是否自动处理多线程

java - Qt Jambi 与 SWT 的跨平台 GUI 开发

java - 使用restful web服务代替soap,而不改变请求的用户部分