我有以下方法。
public ResponseEntity some(@PathVariable("id") final String id_) {
final Long id = ((Supplier<Long>) () -> {
try {
if (id_ == null || id_.equals("dontcare")) {
return null;
}
return Long.parseLong(id_);
} catch (final NumberFormatException nfe) {
throw new RuntimeException(nfe);
}
}).get();
}
您可以假设我想要参数值\d+
或dontcare
。
我如何或可以使用什么来做以下事情?
public ResponseEntity some(
@Dontcare @PathVariable("id") final Long id) {
}
我找到了WebArgumentHandler
,HandlerMethodArgumentResolver
和PathVariableMethodArgumentResolver
,但我找不到任何好的例子。
请帮帮我。
我准备了以下课程。
public class DontcarePathVariableResolver
extends PathVariableMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
final boolean flag = parameter.getMethodAnnotation(
DontcarePathVariable.class) != null;
logger.info("flag: {}", flag);
return flag;
}
@Override
protected Object resolveName(String name, MethodParameter parameter,
NativeWebRequest request)
throws Exception {
@SuppressWarnings({"unchecked"})
final Map<String, String> templateVariables
= (Map<String, String>) request.getAttribute(
HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE,
RequestAttributes.SCOPE_REQUEST);
final String pathValue = templateVariables.get(name);
return new DontcareConverter().convert(pathValue);
}
}
并添加了它。
@Configuration 公共类WebMvcConfiguration扩展了WebMvcConfigurerAdapter {
@Override
public void addArgumentResolvers(final List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new DontcarePathVariableMethodArgumentResolver());
logger.info("resolver added");
//super.addArgumentResolvers(resolvers);
}
}
但确实发挥了作用。
我认为Long
类型的默认处理程序已在使用中。