Свойства конфигурации не подключены автоматически при использовании в теле запроса? - PullRequest
0 голосов
/ 29 августа 2018

Я использую определенный класс (ClassA) в моем контроллере в качестве тела запроса, но в этом классе мои автонастроенные ConfigurationProperties имеют значение null.

Контроллер:

@RestController
@RequestMapping(value = "/rest/v1/")
public class XyzController {

    @Autowired
    ServiceXyz serviceXyz;

    @PostMapping(value = "/route")
    public void route(@RequestBody ClassA classA) {
        serviceXyz.methodAbc(classA);
    }
}

ServiceXYZ:

@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, хотя все помечены правильными аннотациями, а автоматическая разводка работает в остальной части приложения.

Возможно ли, что это просто не работает?

1 Ответ

0 голосов
/ 29 августа 2018

Автопроводка работает для объектов из контекста 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();
  }
}
...