в первом запросе. весной mvc инициирует ресурс. поэтому вы поместили свой динамический URL в 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