2
由于我使用的是CQRS模式,我试图创建一个单一的控制器方法,它接受每个POST调用并在其请求主体中发送一个命令。 我几乎在那里,但我无法获得路径变量。在Spring控制器方法中获取原始映射值
我创建了一个定制的HandlerMapping
@Bean
public HandlerMapping requestMappingHandlerMapping() throws NoSuchMethodException {
for (final UrlEnum urlEnumItem : UrlEnum.values()) {
requestMappingHandlerMapping.registerMapping(new RequestMappingInfo(urlEnumItem.getCommandName(),
new PatternsRequestCondition(urlEnumItem.getUrl()),
null,
null,
null,
null,
null,
null),
commandController,
commandController.getClass().getDeclaredMethod("commandHandler", HttpServletRequest.class)
);
}
return requestMappingHandlerMapping;
}
,这是我的控制器方法签名
@RequestMapping(method = {RequestMethod.POST, RequestMethod.PUT}, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<Object> commandHandler(final HttpServletRequest request) throws Exception {
// controller code here
}
如果URL路径是一样的东西/api/test
它的工作原理,但像/api/test/{idEntity}
我不请求中有任何PathVariable可用。
我什么都试过像
String originalUrl = (String) request.getAttribute(
HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
它返回值的URL(即/api/test/1234
),而不是模板,或添加
@PathVariable Map<String, Object> parameters
在该方法的参数,它是空的。
调试请求对象似乎没有任何有用的标识路径变量。
也许我应该询问HandlerMapping,但我不能在控制器方法中访问它。
有没有办法在控制器方法中提取pathVariables?