Support java.util.Optional for @MVC named value args

After this change, java.util.Optional is supported with @RequestParam,
@RequestHeader, and @MatrixVariable arguments in Java 8. When Optional
is used the required flag is effectively ignored.

Issue: SPR-11829
This commit is contained in:
Rossen Stoyanchev
2014-06-12 23:50:26 -04:00
parent c2356e57c8
commit 0dc6082b01
9 changed files with 185 additions and 10 deletions

View File

@@ -77,9 +77,12 @@ public class RequestHeaderMethodArgumentResolver extends AbstractNamedValueMetho
@Override
protected void handleMissingValue(String headerName, MethodParameter param) throws ServletRequestBindingException {
String paramType = param.getParameterType().getName();
throw new ServletRequestBindingException(
"Missing header '" + headerName + "' for method parameter type [" + paramType + "]");
Class<?> paramType = param.getParameterType();
if (!paramType.getName().equals("java.util.Optional")) {
throw new ServletRequestBindingException(
"Missing header '" + headerName + "' for method parameter type [" + paramType.getName() + "]");
}
}
private static class RequestHeaderNamedValueInfo extends NamedValueInfo {

View File

@@ -252,7 +252,9 @@ public class RequestParamMethodArgumentResolver extends AbstractNamedValueMethod
@Override
protected void handleMissingValue(String paramName, MethodParameter parameter) throws ServletException {
throw new MissingServletRequestParameterException(paramName, parameter.getParameterType().getSimpleName());
if (!parameter.getParameterType().getName().equals("java.util.Optional")) {
throw new MissingServletRequestParameterException(paramName, parameter.getParameterType().getSimpleName());
}
}
@Override