Java 在请求正文中使用时,配置属性未自动连接?

Java 在请求正文中使用时,配置属性未自动连接?,java,spring,spring-boot,inversion-of-control,Java,Spring,Spring Boot,Inversion Of Control,我在控制器中使用一个特定的类(ClassA)作为请求主体,但在该类中,我的autowired ConfigurationProperties为null 控制器: @RestController @请求映射(value=“/rest/v1/”) 公共类XYZ控制器{ @自动连线 服务xyz服务xyz; @后映射(value=“/route”) 公共无效路由(@RequestBody ClassA ClassA){ 服务xyz.方法ABC(A类); } } ServiceXYZ: @服务 公共类服

我在控制器中使用一个特定的类(ClassA)作为请求主体,但在该类中,我的autowired ConfigurationProperties为null

控制器:

@RestController
@请求映射(value=“/rest/v1/”)
公共类XYZ控制器{
@自动连线
服务xyz服务xyz;
@后映射(value=“/route”)
公共无效路由(@RequestBody ClassA ClassA){
服务xyz.方法ABC(A类);
}
}
ServiceXYZ:

@服务
公共类服务xyz{
公共布尔方法ABC(ClassA ClassA){
返回classA.methodA()&&otherStuff();
}
}
ClassA.java:

@组件
甲级公共课{
@自动连线
应用程序属性应用程序属性;
公共布尔方法a(){
返回fieldA.equals(applicationProperties.someProperty());
}
}
ApplicationProperties.java:

@组件
@配置属性(prefix=“stuff”)
公共类应用程序属性{
//等等。
}
ClassA.methodA
中,
applicationProperties
null
,即使每个人都用正确的注释进行了标记,并且自动连接在应用程序的其余部分工作


这可能不起作用吗?

自动关联适用于Spring上下文中的对象。在您的请求中,
ClassA
的对象是从JSON解析的,我认为不是从Spring上下文中获取的。 您最好更改代码,使
ClassA
成为简单的DTO,并将
ApplicationProperties
注入到您的服务类中

您可以将
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();
  }
}

在这种情况下,入站数据是由Jackson解析的JSON。我想我天真地认为这些DTO仍然会被扫描和连接起来。@CharlesWood添加了代码示例,可以解决您的问题