Я пытаюсь построить значение конечной точки из строки, построенной функцией, как показано ниже:
ManagerController.java
@Controller
@RequestMapping(value = "/manager/")
public class ManagerController {
@Autowired
Manager manager;
public String endpointBuilder(String str) {
return "storage/" + str;
}
public String storeEndpoint = endpointBuilder("{store}");
@PostMapping(value = storeEndpoint)
private ResponseEntity<?> storeSomething(String str) {
manager.storeSomething(str);
return new ResponseEntity<>(CREATED);
}
}
Строка @PostMapping(value = storeEndpoint)
приводит к ошибке The value for annotation attribute PostMapping.value must be a constant expression
.Проект, над которым я работаю, имеет большое количество похожих имен конечных точек, и мне было бы полезно использовать endpointBuilder()
, особенно для обеспечения единообразия имен между контроллером REST и его модульными тестами, но я застрял в том, чтобы понять, каксделай так, чтоб это работало.Остальная часть этого примера кода приведена ниже.
Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Manager.java
@Component
public class Manager {
private List<String> storage;
@Autowired
public Manager() {
this.storage = new ArrayList<String>();
}
public void storeSomething(String str) {
storage.add(str);
}
}
Как мне выполнить то, что я пытаюсь сделать, если это возможно?Если это невозможно, есть ли альтернативный способ достижения подобного эффекта?