簡體   English   中英

Spring boot:如何將命令行參數傳遞給注釋值?

[英]Spring boot: How to pass a command line argument into an annotation value?

這是我正在嘗試做的事情:

@SpringBootApplication public class App {
    public static final String NAME;

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Autowired public App(ApplicationArguments arguments) {
        NAME = arguments.getSourceArgs()[0]; // ERROR (1)
    }

    @GetMapping("/" + NAME) public void test() { // ERROR (2)
        return NAME;
    }
}

代碼無法按原樣運行,因為(1)無法分配NAME ,(2) @GetMapping注釋值必須是常量表達式。

我只是希望@GetMapping使用基於命令行參數的值。 如何才能做到這一點?

在第一個請求中。 spring mvc將初始化資源。 所以你把你的動態網址放在haddlermapping中。

我們需要三個班級。 MyController MyDispatcherServlet DispatcherServletCustomConfiguration

MyController.java

@Component(value="MyController")
public class MyController {

@Autowired
ClaimService claimService;

public ResponseEntity<HttpStatus> insertClaim() {
    return new ResponseEntity<>(HttpStatus.OK);
    }

}

MyDispatcherServlet.java。 在initStrategies.put之后,你的動態url進入handdlerMapping。

public class MyDispatcherServlet extends DispatcherServlet {

private String url;


public MyDispatcherServlet(String url) {
    super();
    this.url = url;
}


@Override
protected void onRefresh(ApplicationContext context) {
    initStrategies(context);
    List<HandlerMapping> handlerMappings = getHandlerMappings();
    for (HandlerMapping handlerMapping : handlerMappings) {

        if (handlerMapping instanceof RequestMappingHandlerMapping) {
            RequestMappingHandlerMapping requestMappingHandlerMapping = ((RequestMappingHandlerMapping) handlerMapping);
            RequestMappingInfo.Builder n = RequestMappingInfo
                    .paths(url)
                    .methods(RequestMethod.GET);
            try {
                Method method = MyController.class.getDeclaredMethod("insertClaim");
                requestMappingHandlerMapping.registerMapping(n.build(), "MyController", method);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }

        }
    }

}


}

DispatcherServletCustomConfiguration.java

@Configuration
public class DispatcherServletCustomConfiguration {

@Value("${myUrl}")
private String url;

@Bean
public DispatcherServlet dispatcherServlet() {
    return new MyDispatcherServlet(url);
   }

}

使用命令java -jar stackoverflow-1.0-SNAPSHOT.jar --myUrl=abcd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM