diff --git a/spring-web/src/main/java/org/springframework/web/bind/MissingHeaderException.java b/spring-web/src/main/java/org/springframework/web/bind/MissingHeaderException.java new file mode 100644 index 000000000000..1782a277b3e8 --- /dev/null +++ b/spring-web/src/main/java/org/springframework/web/bind/MissingHeaderException.java @@ -0,0 +1,69 @@ +/* + * Copyright 2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.web.bind; + +import org.springframework.core.MethodParameter; + +/** + * {@link ServletRequestBindingException} subclass that indicates that a header + * variable expected in the method parameters of an {@code @RequestMapping} + * is not present. + * + * @author Per Böckman + * + */ +@SuppressWarnings("serial") +public class MissingHeaderException extends ServletRequestBindingException { + + private final String name; + + private final MethodParameter parameter; + + + /** + * Constructor for MissingHeaderException. + * @param name the name of the missing header + * @param parameter the method parameter + */ + public MissingHeaderException(String name, MethodParameter parameter) { + super(""); + this.name = name; + this.parameter = parameter; + } + + + @Override + public String getMessage() { + return "Missing request header '" + name + + "' for method parameter of type " + parameter.getNestedParameterType().getSimpleName(); + } + + /** + * Return the expected name of the header. + */ + public final String getName() { + return this.name; + } + + /** + * Return the method parameter bound to the path variable. + */ + public final MethodParameter getParameter() { + return this.parameter; + } + +} diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/RequestHeaderMethodArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/method/annotation/RequestHeaderMethodArgumentResolver.java index ad8064eaf337..d8df81aa24bd 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/RequestHeaderMethodArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/RequestHeaderMethodArgumentResolver.java @@ -22,6 +22,7 @@ import org.springframework.core.MethodParameter; import org.springframework.lang.Nullable; import org.springframework.util.Assert; +import org.springframework.web.bind.MissingHeaderException; import org.springframework.web.bind.ServletRequestBindingException; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.RequestHeader; @@ -82,8 +83,7 @@ protected Object resolveName(String name, MethodParameter parameter, NativeWebRe @Override protected void handleMissingValue(String name, MethodParameter parameter) throws ServletRequestBindingException { - throw new ServletRequestBindingException("Missing request header '" + name + - "' for method parameter of type " + parameter.getNestedParameterType().getSimpleName()); + throw new MissingHeaderException(name, parameter); }