[
https://issues.apache.org/jira/browse/SCB-925?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16632863#comment-16632863
]
ASF GitHub Bot commented on SCB-925:
------------------------------------
weichao666 closed pull request #914: [SCB-925] Springmvc, when have
defaultValue, required should be false
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/914
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/AbstractParamProcessor.java
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/AbstractParamProcessor.java
index 509e03e8c..dba683d7a 100644
---
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/AbstractParamProcessor.java
+++
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/AbstractParamProcessor.java
@@ -22,6 +22,8 @@
public abstract class AbstractParamProcessor implements ParamValueProcessor {
protected String paramPath;
+ protected boolean required = false;
+
protected JavaType targetType;
protected Object defaultValue;
@@ -30,8 +32,9 @@ public Object getDefaultValue() {
return defaultValue;
}
- public AbstractParamProcessor(String paramPath, JavaType targetType, Object
defaultValue) {
+ public AbstractParamProcessor(String paramPath, boolean required, JavaType
targetType, Object defaultValue) {
this.paramPath = paramPath;
+ this.required = required;
this.targetType = targetType;
this.defaultValue = defaultValue;
}
@@ -39,4 +42,8 @@ public AbstractParamProcessor(String paramPath, JavaType
targetType, Object defa
public String getParameterPath() {
return paramPath;
}
+
+ public boolean isRequired() {
+ return required;
+ }
}
diff --git
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
index 659637e50..924be7aa2 100644
---
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
+++
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/CookieProcessorCreator.java
@@ -21,9 +21,11 @@
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response.Status;
import org.apache.servicecomb.common.rest.codec.RestClientRequest;
import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.type.TypeFactory;
@@ -35,8 +37,8 @@
public static final String PARAMTYPE = "cookie";
public static class CookieProcessor extends AbstractParamProcessor {
- public CookieProcessor(String paramPath, JavaType targetType, Object
defaultValue) {
- super(paramPath, targetType, defaultValue);
+ public CookieProcessor(String paramPath, boolean required, JavaType
targetType, Object defaultValue) {
+ super(paramPath, required, targetType, defaultValue);
}
@Override
@@ -51,6 +53,9 @@ public Object getValue(HttpServletRequest request) throws
Exception {
if (paramPath.equals(cookie.getName())) {
value = cookie.getValue();
if (value == null) {
+ if (isRequired()) {
+ throw new InvocationException(Status.BAD_REQUEST, "Parameter is
not valid, required is true");
+ }
Object defaultValue = getDefaultValue();
if (defaultValue != null) {
value = defaultValue.toString();
@@ -81,6 +86,6 @@ public CookieProcessorCreator() {
@Override
public ParamValueProcessor create(Parameter parameter, Type
genericParamType) {
JavaType targetType =
TypeFactory.defaultInstance().constructType(genericParamType);
- return new CookieProcessor(parameter.getName(), targetType,
((CookieParameter) parameter).getDefaultValue());
+ return new CookieProcessor(parameter.getName(), parameter.getRequired(),
targetType, ((CookieParameter) parameter).getDefaultValue());
}
}
diff --git
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/FormProcessorCreator.java
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/FormProcessorCreator.java
index 81cf9125c..f34980f78 100644
---
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/FormProcessorCreator.java
+++
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/FormProcessorCreator.java
@@ -22,9 +22,11 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
+import javax.ws.rs.core.Response.Status;
import org.apache.servicecomb.common.rest.RestConst;
import org.apache.servicecomb.common.rest.codec.RestClientRequest;
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.type.TypeFactory;
@@ -37,8 +39,8 @@
public static final String PARAMTYPE = "formData";
public static class FormProcessor extends AbstractParamProcessor {
- public FormProcessor(String paramPath, JavaType targetType, Object
defaultValue) {
- super(paramPath, targetType, defaultValue);
+ public FormProcessor(String paramPath, boolean required, JavaType
targetType, Object defaultValue) {
+ super(paramPath, required, targetType, defaultValue);
}
@Override
@@ -55,6 +57,9 @@ public Object getValue(HttpServletRequest request) {
Object value = request.getParameter(paramPath);
if (value == null) {
+ if (isRequired()) {
+ throw new InvocationException(Status.BAD_REQUEST, "Parameter is not
valid, required is true");
+ }
Object defaultValue = getDefaultValue();
if (defaultValue != null) {
value = defaultValue;
@@ -84,9 +89,9 @@ public ParamValueProcessor create(Parameter parameter, Type
genericParamType) {
JavaType targetType =
TypeFactory.defaultInstance().constructType(genericParamType);
if (isPart(parameter)) {
- return new PartProcessor(parameter.getName(), targetType,
((FormParameter) parameter).getDefaultValue());
+ return new PartProcessor(parameter.getName(), parameter.getRequired(),
targetType, ((FormParameter) parameter).getDefaultValue());
}
- return new FormProcessor(parameter.getName(), targetType, ((FormParameter)
parameter).getDefaultValue());
+ return new FormProcessor(parameter.getName(), parameter.getRequired(),
targetType, ((FormParameter) parameter).getDefaultValue());
}
private boolean isPart(Parameter parameter) {
@@ -94,8 +99,8 @@ private boolean isPart(Parameter parameter) {
}
private static class PartProcessor extends AbstractParamProcessor {
- PartProcessor(String paramPath, JavaType targetType, Object defaultValue) {
- super(paramPath, targetType, defaultValue);
+ PartProcessor(String paramPath, boolean required, JavaType targetType,
Object defaultValue) {
+ super(paramPath, required, targetType, defaultValue);
}
@Override
diff --git
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
index 810e01814..c7efbe451 100644
---
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
+++
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/HeaderProcessorCreator.java
@@ -22,9 +22,11 @@
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response.Status;
import org.apache.servicecomb.common.rest.codec.RestClientRequest;
import org.apache.servicecomb.common.rest.codec.RestObjectMapperFactory;
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,8 +42,8 @@
public static final String PARAMTYPE = "header";
public static class HeaderProcessor extends AbstractParamProcessor {
- public HeaderProcessor(String paramPath, JavaType targetType, Object
defaultValue) {
- super(paramPath, targetType, defaultValue);
+ public HeaderProcessor(String paramPath, boolean required, JavaType
targetType, Object defaultValue) {
+ super(paramPath, required, targetType, defaultValue);
}
@Override
@@ -57,6 +59,9 @@ public Object getValue(HttpServletRequest request) throws
Exception {
} else {
value = request.getHeader(paramPath);
if (value == null) {
+ if (isRequired()) {
+ throw new InvocationException(Status.BAD_REQUEST, "Parameter is
not valid, required is true");
+ }
Object defaultValue = getDefaultValue();
if (defaultValue != null) {
value = defaultValue;
@@ -91,6 +96,6 @@ public HeaderProcessorCreator() {
@Override
public ParamValueProcessor create(Parameter parameter, Type
genericParamType) {
JavaType targetType =
TypeFactory.defaultInstance().constructType(genericParamType);
- return new HeaderProcessor(parameter.getName(), targetType,
((HeaderParameter) parameter).getDefaultValue());
+ return new HeaderProcessor(parameter.getName(), parameter.getRequired(),
targetType, ((HeaderParameter) parameter).getDefaultValue());
}
}
diff --git
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
index dbf459c80..9016c0d8f 100644
---
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
+++
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/PathProcessorCreator.java
@@ -36,8 +36,8 @@
public static final String PARAMTYPE = "path";
public static class PathProcessor extends AbstractParamProcessor {
- public PathProcessor(String paramPath, JavaType targetType, Object
defaultValue) {
- super(paramPath, targetType, defaultValue);
+ public PathProcessor(String paramPath, boolean required, JavaType
targetType, Object defaultValue) {
+ super(paramPath, required, targetType, defaultValue);
}
@Override
@@ -73,6 +73,6 @@ public PathProcessorCreator() {
@Override
public ParamValueProcessor create(Parameter parameter, Type
genericParamType) {
JavaType targetType =
TypeFactory.defaultInstance().constructType(genericParamType);
- return new PathProcessor(parameter.getName(), targetType, ((PathParameter)
parameter).getDefaultValue());
+ return new PathProcessor(parameter.getName(), parameter.getRequired(),
targetType, ((PathParameter) parameter).getDefaultValue());
}
}
diff --git
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/QueryProcessorCreator.java
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/QueryProcessorCreator.java
index 713711ed8..bd6a1eaf4 100644
---
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/QueryProcessorCreator.java
+++
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/QueryProcessorCreator.java
@@ -20,9 +20,11 @@
import java.lang.reflect.Type;
import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response.Status;
import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.common.rest.codec.RestClientRequest;
+import org.apache.servicecomb.swagger.invocation.exception.InvocationException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.type.TypeFactory;
@@ -42,8 +44,8 @@
private boolean ignoreDefaultValue = DynamicPropertyFactory.getInstance()
.getBooleanProperty("servicecomb.rest.parameter.query.ignoreDefaultValue",
false).get();
- public QueryProcessor(String paramPath, JavaType targetType, Object
defaultValue) {
- super(paramPath, targetType, defaultValue);
+ public QueryProcessor(String paramPath, boolean required, JavaType
targetType, Object defaultValue) {
+ super(paramPath, required, targetType, defaultValue);
}
@Override
@@ -60,6 +62,9 @@ public Object getValue(HttpServletRequest request) throws
Exception {
}
}
if (value == null) {
+ if (isRequired()) {
+ throw new InvocationException(Status.BAD_REQUEST, "Parameter is
not valid, required is true");
+ }
Object defaultValue = getDefaultValue();
if (!ignoreDefaultValue && defaultValue != null) {
value = defaultValue;
@@ -88,6 +93,6 @@ public QueryProcessorCreator() {
@Override
public ParamValueProcessor create(Parameter parameter, Type
genericParamType) {
JavaType targetType =
TypeFactory.defaultInstance().constructType(genericParamType);
- return new QueryProcessor(parameter.getName(), targetType,
((QueryParameter) parameter).getDefaultValue());
+ return new QueryProcessor(parameter.getName(), parameter.getRequired(),
targetType, ((QueryParameter) parameter).getDefaultValue());
}
}
diff --git
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
index 370543494..292cde4e0 100644
---
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
+++
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestCookieProcessor.java
@@ -44,8 +44,12 @@
RestClientRequest clientRequest;
- private CookieProcessor createProcessor(String name, Class<?> type) {
- return new CookieProcessor(name,
TypeFactory.defaultInstance().constructType(type), null);
+ private CookieProcessor createProcessor(String name, boolean required,
Class<?> type) {
+ return new CookieProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), null);
+ }
+
+ private CookieProcessor createProcessor(String name, boolean required,
Class<?> type, String defaultValue) {
+ return new CookieProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), defaultValue);
}
private void createClientRequest() {
@@ -66,7 +70,7 @@ public void testGetValueNoCookies() throws Exception {
}
};
- CookieProcessor processor = createProcessor("c1", String.class);
+ CookieProcessor processor = createProcessor("c1", true, String.class);
Object value = processor.getValue(request);
Assert.assertNull(value);
}
@@ -81,7 +85,7 @@ public void testGetValueCookiesNotFound() throws Exception {
}
};
- CookieProcessor processor = createProcessor("c2", String.class);
+ CookieProcessor processor = createProcessor("c2", true, String.class);
Object value = processor.getValue(request);
Assert.assertNull(value);
}
@@ -96,11 +100,45 @@ public void testGetValueCookiesFound() throws Exception {
}
};
- CookieProcessor processor = createProcessor("c1", String.class);
+ CookieProcessor processor = createProcessor("c1", true, String.class);
Object value = processor.getValue(request);
Assert.assertEquals("c1v", value);
}
+ @Test
+ public void testGetValueRequiredTrue() throws Exception {
+ Cookie[] cookies = new Cookie[] {new Cookie("c1", null)};
+ new Expectations() {
+ {
+ request.getCookies();
+ result = cookies;
+ }
+ };
+
+ CookieProcessor processor = createProcessor("c1", true, String.class);
+ try {
+ processor.getValue(request);
+ Assert.assertEquals("required is true, throw exception", "not throw
exception");
+ } catch (Exception e) {
+ Assert.assertTrue(e.getMessage().contains("Parameter is not valid,
required is true"));
+ }
+ }
+
+ @Test
+ public void testGetValueRequiredFalse() throws Exception {
+ Cookie[] cookies = new Cookie[] {new Cookie("c1", null)};
+ new Expectations() {
+ {
+ request.getCookies();
+ result = cookies;
+ }
+ };
+
+ CookieProcessor processor = createProcessor("c1", false, String.class,
"test");
+ Object result = processor.getValue(request);
+ Assert.assertEquals("test", result);
+ }
+
@SuppressWarnings("deprecation")
@Test
public void testGetValueCookiesDate() throws Exception {
@@ -114,7 +152,7 @@ public void testGetValueCookiesDate() throws Exception {
}
};
- CookieProcessor processor = createProcessor("c1", Date.class);
+ CookieProcessor processor = createProcessor("c1", true, Date.class);
Object value = processor.getValue(request);
Assert.assertEquals(strDate,
com.fasterxml.jackson.databind.util.ISO8601Utils.format((Date) value));
}
@@ -123,7 +161,7 @@ public void testGetValueCookiesDate() throws Exception {
public void testSetValue() throws Exception {
createClientRequest();
- CookieProcessor processor = createProcessor("c1", String.class);
+ CookieProcessor processor = createProcessor("c1", true, String.class);
processor.setValue(clientRequest, "c1v");
Assert.assertEquals("c1v", cookies.get("c1"));
}
@@ -136,14 +174,14 @@ public void testSetValueDate() throws Exception {
createClientRequest();
- CookieProcessor processor = createProcessor("h1", Date.class);
+ CookieProcessor processor = createProcessor("h1", true, Date.class);
processor.setValue(clientRequest, date);
Assert.assertEquals(strDate, cookies.get("h1"));
}
@Test
public void testGetProcessorType() {
- CookieProcessor processor = createProcessor("c1", String.class);
+ CookieProcessor processor = createProcessor("c1", true, String.class);
Assert.assertEquals("cookie", processor.getProcessorType());
}
}
diff --git
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
index a75694058..089818c71 100644
---
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
+++
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestFormProcessor.java
@@ -47,8 +47,12 @@
RestClientRequest clientRequest;
- private FormProcessor createProcessor(String name, Class<?> type) {
- return new FormProcessor(name,
TypeFactory.defaultInstance().constructType(type), null);
+ private FormProcessor createProcessor(String name, boolean required,
Class<?> type) {
+ return new FormProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), null);
+ }
+
+ private FormProcessor createProcessor(String name, boolean required,
Class<?> type, String defaultValue) {
+ return new FormProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), defaultValue);
}
private void createClientRequest() {
@@ -71,7 +75,7 @@ public void testGetValueWithAttr() throws Exception {
}
};
- ParamValueProcessor processor = createProcessor("name", String.class);
+ ParamValueProcessor processor = createProcessor("name", true,
String.class);
Object value = processor.getValue(request);
Assert.assertEquals("value", value);
}
@@ -85,7 +89,7 @@ public void testGetValueNormal() throws Exception {
}
};
- ParamValueProcessor processor = createProcessor("name", String.class);
+ ParamValueProcessor processor = createProcessor("name", true,
String.class);
Object value = processor.getValue(request);
Assert.assertEquals("value", value);
}
@@ -103,7 +107,7 @@ public void testGetValueNormalDate() throws Exception {
}
};
- ParamValueProcessor processor = createProcessor("name", Date.class);
+ ParamValueProcessor processor = createProcessor("name", true, Date.class);
Object value = processor.getValue(request);
Assert.assertEquals(strDate,
com.fasterxml.jackson.databind.util.ISO8601Utils.format((Date) value));
}
@@ -117,11 +121,43 @@ public void testGetValueContainerTypeNull() throws
Exception {
}
};
- ParamValueProcessor processor = createProcessor("name", String[].class);
+ ParamValueProcessor processor = createProcessor("name", true,
String[].class);
String[] value = (String[]) processor.getValue(request);
Assert.assertNull(value);
}
+ @Test
+ public void testGetValueRequiredTrue() throws Exception {
+ new Expectations() {
+ {
+ request.getParameter("name");
+ result = null;
+ }
+ };
+
+ ParamValueProcessor processor = createProcessor("name", true,
String.class);
+ try {
+ processor.getValue(request);
+ Assert.assertEquals("required is true, throw exception", "not throw
exception");
+ } catch (Exception e) {
+ Assert.assertTrue(e.getMessage().contains("Parameter is not valid,
required is true"));
+ }
+ }
+
+ @Test
+ public void testGetValueRequiredFalse() throws Exception {
+ new Expectations() {
+ {
+ request.getParameter("name");
+ result = null;
+ }
+ };
+
+ ParamValueProcessor processor = createProcessor("name", false,
String.class, "test");
+ Object result = processor.getValue(request);
+ Assert.assertEquals("test", result);
+ }
+
@Test
public void testGetValueArray() throws Exception {
new Expectations() {
@@ -131,7 +167,7 @@ public void testGetValueArray() throws Exception {
}
};
- ParamValueProcessor processor = createProcessor("name", String[].class);
+ ParamValueProcessor processor = createProcessor("name", true,
String[].class);
String[] value = (String[]) processor.getValue(request);
Assert.assertThat(value, Matchers.arrayContaining("value"));
}
@@ -147,7 +183,7 @@ public void testGetValueList() throws Exception {
};
ParamValueProcessor processor =
- new FormProcessor("name",
TypeFactory.defaultInstance().constructCollectionType(List.class, String.class),
+ new FormProcessor("name", true,
TypeFactory.defaultInstance().constructCollectionType(List.class, String.class),
null);
Object value = processor.getValue(request);
Assert.assertThat((List<String>) value, Matchers.contains("value"));
@@ -164,7 +200,8 @@ public void testGetValueSet() throws Exception {
};
ParamValueProcessor processor =
- new FormProcessor("name",
TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class),
null);
+ new FormProcessor("name", true,
TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class),
+ null);
Object value = processor.getValue(request);
Assert.assertThat((Set<String>) value, Matchers.contains("value"));
}
@@ -173,7 +210,7 @@ public void testGetValueSet() throws Exception {
public void testSetValue() throws Exception {
createClientRequest();
- ParamValueProcessor processor = createProcessor("name", String.class);
+ ParamValueProcessor processor = createProcessor("name", true,
String.class);
processor.setValue(clientRequest, "value");
Assert.assertEquals("value", forms.get("name"));
}
@@ -184,14 +221,14 @@ public void testSetValueDate() throws Exception {
createClientRequest();
- ParamValueProcessor processor = createProcessor("name", Date.class);
+ ParamValueProcessor processor = createProcessor("name", true, Date.class);
processor.setValue(clientRequest, date);
Assert.assertSame(date, forms.get("name"));
}
@Test
public void testGetProcessorType() {
- ParamValueProcessor processor = createProcessor("name", String.class);
+ ParamValueProcessor processor = createProcessor("name", true,
String.class);
Assert.assertEquals("formData", processor.getProcessorType());
}
}
diff --git
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
index 667e53ba7..acd97098b 100644
---
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
+++
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestHeaderProcessor.java
@@ -48,8 +48,12 @@
RestClientRequest clientRequest;
- private HeaderProcessor createProcessor(String name, Class<?> type) {
- return new HeaderProcessor(name,
TypeFactory.defaultInstance().constructType(type), null);
+ private HeaderProcessor createProcessor(String name, boolean required,
Class<?> type) {
+ return new HeaderProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), null);
+ }
+
+ private HeaderProcessor createProcessor(String name, boolean required,
Class<?> type, String defaultValue) {
+ return new HeaderProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), defaultValue);
}
private void createClientRequest() {
@@ -70,7 +74,7 @@ public void testGetValueNormal() throws Exception {
}
};
- HeaderProcessor processor = createProcessor("h1", String.class);
+ HeaderProcessor processor = createProcessor("h1", true, String.class);
Object value = processor.getValue(request);
Assert.assertEquals("h1v", value);
}
@@ -88,7 +92,7 @@ public void testGetValueNormalDate() throws Exception {
}
};
- HeaderProcessor processor = createProcessor("h1", Date.class);
+ HeaderProcessor processor = createProcessor("h1", true, Date.class);
Object value = processor.getValue(request);
Assert.assertEquals(strDate,
com.fasterxml.jackson.databind.util.ISO8601Utils.format((Date) value));
}
@@ -102,11 +106,44 @@ public void testGetValueContainerTypeNull() throws
Exception {
}
};
- HeaderProcessor processor = createProcessor("h1", String[].class);
+ HeaderProcessor processor = createProcessor("h1", true, String[].class);
String[] value = (String[]) processor.getValue(request);
Assert.assertNull(value);
}
+ @Test
+ public void testGetValueRequiredTrue() throws Exception {
+ new Expectations() {
+ {
+ request.getHeader("h1");
+ result = null;
+ }
+ };
+
+ HeaderProcessor processor = createProcessor("h1", true, String.class);
+ try {
+ processor.getValue(request);
+ Assert.assertEquals("required is true, throw exception", "not throw
exception");
+ } catch (Exception e) {
+ Assert.assertTrue(e.getMessage().contains("Parameter is not valid,
required is true"));
+ }
+
+ }
+
+ @Test
+ public void testGetValueRequiredFalse() throws Exception {
+ new Expectations() {
+ {
+ request.getHeader("h1");
+ result = null;
+ }
+ };
+
+ HeaderProcessor processor = createProcessor("h1", false, String.class,
"test");
+ Object value = processor.getValue(request);
+ Assert.assertEquals("test", value);
+ }
+
@Test
public void testGetValueArray() throws Exception {
new Expectations() {
@@ -116,7 +153,7 @@ public void testGetValueArray() throws Exception {
}
};
- HeaderProcessor processor = createProcessor("h1", String[].class);
+ HeaderProcessor processor = createProcessor("h1", true, String[].class);
String[] value = (String[]) processor.getValue(request);
Assert.assertThat(value, Matchers.arrayContaining("h1v"));
}
@@ -132,7 +169,7 @@ public void testGetValueList() throws Exception {
};
HeaderProcessor processor =
- new HeaderProcessor("h1",
TypeFactory.defaultInstance().constructCollectionType(List.class, String.class),
+ new HeaderProcessor("h1", true,
TypeFactory.defaultInstance().constructCollectionType(List.class, String.class),
null);
Object value = processor.getValue(request);
Assert.assertThat((List<String>) value, Matchers.contains("h1v"));
@@ -149,7 +186,8 @@ public void testGetValueSet() throws Exception {
};
HeaderProcessor processor =
- new HeaderProcessor("h1",
TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class),
null);
+ new HeaderProcessor("h1", true,
TypeFactory.defaultInstance().constructCollectionType(Set.class, String.class),
+ null);
Object value = processor.getValue(request);
Assert.assertThat((Set<String>) value, Matchers.contains("h1v"));
}
@@ -158,7 +196,7 @@ public void testGetValueSet() throws Exception {
public void testSetValue() throws Exception {
createClientRequest();
- HeaderProcessor processor = createProcessor("h1", String.class);
+ HeaderProcessor processor = createProcessor("h1", true, String.class);
processor.setValue(clientRequest, "h1v");
Assert.assertEquals("h1v", headers.get("h1"));
}
@@ -166,7 +204,7 @@ public void testSetValue() throws Exception {
@Test
public void testSetValueNull() throws Exception {
createClientRequest();
- HeaderProcessor processor = createProcessor("h1", String.class);
+ HeaderProcessor processor = createProcessor("h1", true, String.class);
processor.setValue(clientRequest, null);
Assert.assertEquals(0, headers.size());
}
@@ -179,14 +217,14 @@ public void testSetValueDate() throws Exception {
createClientRequest();
- HeaderProcessor processor = createProcessor("h1", Date.class);
+ HeaderProcessor processor = createProcessor("h1", true, Date.class);
processor.setValue(clientRequest, date);
Assert.assertEquals(strDate, headers.get("h1"));
}
@Test
public void testGetProcessorType() {
- HeaderProcessor processor = createProcessor("h1", String.class);
+ HeaderProcessor processor = createProcessor("h1", true, String.class);
Assert.assertEquals("header", processor.getProcessorType());
}
}
diff --git
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
index 19cd51f7e..5a954d83b 100644
---
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
+++
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestPathProcessor.java
@@ -40,12 +40,12 @@
ParamValueProcessor processor;
- private void createProcessor(String name, Class<?> type) {
- processor = new PathProcessor(name,
TypeFactory.defaultInstance().constructType(type), null);
+ private void createProcessor(String name, boolean required, Class<?> type) {
+ processor = new PathProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), null);
}
private void prepareGetValue(String name, Class<?> type) {
- createProcessor(name, type);
+ createProcessor(name, true, type);
new Expectations() {
{
request.getAttribute(RestConst.PATH_PARAMETERS);
@@ -56,7 +56,7 @@ private void prepareGetValue(String name, Class<?> type) {
@Test
public void testGetValueNoPathVars() throws Exception {
- createProcessor("name", String.class);
+ createProcessor("name", true, String.class);
Assert.assertEquals(null, processor.getValue(request));
}
@@ -102,7 +102,7 @@ public void testGetPercentage() throws Exception {
@Test
public void testGetProcessorType() {
- createProcessor("name", String.class);
+ createProcessor("name", true, String.class);
Assert.assertEquals("path", processor.getProcessorType());
}
}
diff --git
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
index 75f1ee040..88aa4e9d3 100644
---
a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
+++
b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestQueryProcessor.java
@@ -33,8 +33,12 @@
@Mocked
HttpServletRequest request;
- private ParamValueProcessor createProcessor(String name, Class<?> type) {
- return new QueryProcessor(name,
TypeFactory.defaultInstance().constructType(type), null);
+ private ParamValueProcessor createProcessor(String name, boolean required,
Class<?> type) {
+ return new QueryProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), null);
+ }
+
+ private ParamValueProcessor createProcessor(String name, boolean required,
Class<?> type, String defaultValue) {
+ return new QueryProcessor(name, required,
TypeFactory.defaultInstance().constructType(type), defaultValue);
}
@Test
@@ -46,7 +50,7 @@ public void testGetValueNormal() throws Exception {
}
};
- ParamValueProcessor processor = createProcessor("name", String.class);
+ ParamValueProcessor processor = createProcessor("name", true,
String.class);
Object value = processor.getValue(request);
Assert.assertEquals("value", value);
}
@@ -60,14 +64,46 @@ public void testGetValueContainerType() throws Exception {
}
};
- ParamValueProcessor processor = createProcessor("name", String[].class);
+ ParamValueProcessor processor = createProcessor("name", true,
String[].class);
String[] value = (String[]) processor.getValue(request);
Assert.assertThat(value, Matchers.arrayContaining("value"));
}
@Test
public void testGetProcessorType() {
- ParamValueProcessor processor = createProcessor("name", String.class);
+ ParamValueProcessor processor = createProcessor("name", true,
String.class);
Assert.assertEquals("query", processor.getProcessorType());
}
+
+ @Test
+ public void testGetValueRequiredTrue() throws Exception {
+ new Expectations() {
+ {
+ request.getParameter("name");
+ result = null;
+ }
+ };
+
+ ParamValueProcessor processor = createProcessor("name", true,
String.class);
+ try {
+ processor.getValue(request);
+ Assert.assertEquals("required is true, throw exception", "not throw
exception");
+ } catch (Exception e) {
+ Assert.assertTrue(e.getMessage().contains("Parameter is not valid,
required is true"));
+ }
+ }
+
+ @Test
+ public void testGetValueRequiredFalse() throws Exception {
+ new Expectations() {
+ {
+ request.getParameter("name");
+ result = null;
+ }
+ };
+
+ ParamValueProcessor processor = createProcessor("name", false,
String.class, "test");
+ Object result = processor.getValue(request);
+ Assert.assertEquals("test", result);
+ }
}
diff --git a/demo/demo-schema/src/main/resources/microservices/pojo/server.yaml
b/demo/demo-schema/src/main/resources/microservices/pojo/server.yaml
index 985fcb71e..15b1d8270 100644
--- a/demo/demo-schema/src/main/resources/microservices/pojo/server.yaml
+++ b/demo/demo-schema/src/main/resources/microservices/pojo/server.yaml
@@ -57,7 +57,7 @@ paths:
parameters:
- name: code
in: query
- required: true
+ required: false
type: string
responses:
200:
diff --git
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java
index d6b33ebe4..3e9150962 100644
---
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java
+++
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/SpringMvcDefaultValues.java
@@ -61,7 +61,7 @@ public String query2(@RequestParam(name = "e", required =
false) int e,
}
@GetMapping("/query3")
- public String query3(@RequestParam("a") @Min(value = 20) int a,
@RequestParam("b") String b) {
+ public String query3(@RequestParam("a") @Min(value = 20) int a,
@RequestParam(name = "b", required = false) String b) {
return "Hello " + a + b;
}
diff --git
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
index 8d55dd35d..e5e322e2e 100644
---
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
+++
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
@@ -334,7 +334,12 @@ public void stringHeader_require_springmvc_rt() {
@Test
public void intForm_require_springmvc_intf() {
- assertEquals(defaultInt,
consumersSpringmvc.getIntf().intFormRequire(null));
+ try {
+ consumersSpringmvc.getIntf().intFormRequire(null);
+ assertEquals("required is true, throw exception", "but not throw
exception");
+ } catch (Exception e) {
+ assertEquals(true, e.getMessage().contains("Parameter is not valid"));
+ }
}
@Test
@@ -344,13 +349,22 @@ public void doubleForm_require_springmvc_intf() {
@Test
public void stringForm_require_springmvc_intf() {
- assertEquals(defaultStr,
consumersSpringmvc.getIntf().stringFormRequire(null));
+ try {
+ consumersSpringmvc.getIntf().stringFormRequire(null);
+ assertEquals("required is true, throw exception", "but not throw
exception");
+ } catch (Exception e) {
+ assertEquals(true, e.getMessage().contains("Parameter is not valid"));
+ }
}
@Test
public void intForm_require_springmvc_rt() {
- assertEquals(defaultInt,
- (int)
consumersSpringmvc.getSCBRestTemplate().postForObject("/intFormRequire", null,
int.class));
+ try {
+ consumersSpringmvc.getSCBRestTemplate().postForObject("/intFormRequire",
null, int.class);
+ assertEquals("required is true, throw exception", "but not throw
exception");
+ } catch (Exception e) {
+ assertEquals(true, e.getMessage().contains("Parameter is not valid"));
+ }
}
@Test
@@ -361,7 +375,11 @@ public void doubleForm_require_springmvc_rt() {
@Test
public void stringForm_require_springmvc_rt() {
- assertEquals(defaultStr,
-
consumersSpringmvc.getSCBRestTemplate().postForObject("/stringFormRequire",
null, String.class));
+ try {
+
consumersSpringmvc.getSCBRestTemplate().postForObject("/stringFormRequire",
null, String.class);
+ assertEquals("required is true, throw exception", "but not throw
exception");
+ } catch (Exception e) {
+ assertEquals(true, e.getMessage().contains("Parameter is not valid"));
+ }
}
}
diff --git
a/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvc.java
b/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvc.java
index c235b7999..0a47f1f7b 100644
---
a/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvc.java
+++
b/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvc.java
@@ -98,7 +98,7 @@ public String fileUpload(@RequestPart(name = "file1")
MultipartFile file1,
@RequestMapping(path = "/uploadWithoutAnnotation", method =
RequestMethod.POST, produces = MediaType.TEXT_PLAIN_VALUE, consumes =
MediaType.MULTIPART_FORM_DATA_VALUE)
public String fileUploadWithoutAnnotation(MultipartFile file1, MultipartFile
file2,
- @RequestAttribute("name") String name) {
+ @RequestAttribute(name = "name", required = false) String name) {
return super.fileUpload(file1, file2, name);
}
diff --git
a/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvcSimplifiedMappingAnnotation.java
b/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvcSimplifiedMappingAnnotation.java
index 65e6b8ccd..1d73d15b6 100644
---
a/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvcSimplifiedMappingAnnotation.java
+++
b/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvcSimplifiedMappingAnnotation.java
@@ -101,7 +101,7 @@ public String fileUpload(@RequestPart(name = "file1")
MultipartFile file1,
@PostMapping(path = "/uploadWithoutAnnotation", produces =
MediaType.TEXT_PLAIN_VALUE)
public String fileUploadWithoutAnnotation(MultipartFile file1, MultipartFile
file2,
- @RequestAttribute("name") String name) {
+ @RequestAttribute(name = "name", required = false) String name) {
return super.fileUpload(file1, file2, name);
}
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractParameterProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractParameterProcessor.java
index 04d992cb5..7ef68e449 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractParameterProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractParameterProcessor.java
@@ -59,10 +59,9 @@ protected void setParameterName(Object annotation,
OperationGenerator operationG
protected void setParameterDefaultValue(Object annotation, T parameter) {
String defaultValue = getAnnotationParameterDefaultValue(annotation);
- if (StringUtils.isNotEmpty(defaultValue)) {
+ if (StringUtils.isNotEmpty(defaultValue)) {
parameter.setDefaultValue(defaultValue);
}
-
}
protected String getAnnotationParameterDefaultValue(Object annotation) {
diff --git
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/CookieValueAnnotationProcessor.java
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/CookieValueAnnotationProcessor.java
index f96802d3e..af8d2ee78 100644
---
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/CookieValueAnnotationProcessor.java
+++
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/CookieValueAnnotationProcessor.java
@@ -17,6 +17,7 @@
package
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
+import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
import
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
import org.springframework.web.bind.annotation.CookieValue;
@@ -44,6 +45,11 @@ protected void fillParameter(Object annotation,
OperationGenerator operationGene
CookieParameter parameter) {
super.fillParameter(annotation, operationGenerator, paramIdx, parameter);
+ String defaultValue = getAnnotationParameterDefaultValue(annotation);
+ if (StringUtils.isNotEmpty(defaultValue)) {
+ parameter.setRequired(false);
+ return;
+ }
CookieValue cookie = (CookieValue) annotation;
parameter.setRequired(cookie.required());
}
diff --git
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/PathVariableAnnotationProcessor.java
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/PathVariableAnnotationProcessor.java
index ea52624f4..b99b0b220 100644
---
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/PathVariableAnnotationProcessor.java
+++
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/PathVariableAnnotationProcessor.java
@@ -17,6 +17,7 @@
package
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
+import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
import
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
import org.springframework.web.bind.annotation.PathVariable;
@@ -43,6 +44,11 @@ protected void fillParameter(Object annotation,
OperationGenerator operationGene
PathParameter parameter) {
super.fillParameter(annotation, operationGenerator, paramIdx, parameter);
+ String defaultValue = getAnnotationParameterDefaultValue(annotation);
+ if (StringUtils.isNotEmpty(defaultValue)) {
+ parameter.setRequired(false);
+ return;
+ }
PathVariable pathVariable = (PathVariable) annotation;
parameter.setRequired(pathVariable.required());
}
diff --git
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestAttributeAnnotationProcessor.java
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestAttributeAnnotationProcessor.java
index 5a9f69dcb..8ce57fc21 100644
---
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestAttributeAnnotationProcessor.java
+++
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestAttributeAnnotationProcessor.java
@@ -17,6 +17,7 @@
package
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
+import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
import
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
import org.springframework.web.bind.annotation.RequestAttribute;
@@ -42,6 +43,11 @@ protected void fillParameter(Object annotation,
OperationGenerator operationGene
FormParameter parameter) {
super.fillParameter(annotation, operationGenerator, paramIdx, parameter);
+ String defaultValue = getAnnotationParameterDefaultValue(annotation);
+ if (StringUtils.isNotEmpty(defaultValue)) {
+ parameter.setRequired(false);
+ return;
+ }
RequestAttribute requestAttribute = (RequestAttribute) annotation;
parameter.setRequired(requestAttribute.required());
}
diff --git
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestHeaderAnnotationProcessor.java
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestHeaderAnnotationProcessor.java
index d34c296ab..98964955c 100644
---
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestHeaderAnnotationProcessor.java
+++
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestHeaderAnnotationProcessor.java
@@ -17,6 +17,7 @@
package
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
+import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
import
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
import org.springframework.web.bind.annotation.RequestHeader;
@@ -44,6 +45,11 @@ protected void fillParameter(Object annotation,
OperationGenerator operationGene
HeaderParameter parameter) {
super.fillParameter(annotation, operationGenerator, paramIdx, parameter);
+ String defaultValue = getAnnotationParameterDefaultValue(annotation);
+ if (StringUtils.isNotEmpty(defaultValue)) {
+ parameter.setRequired(false);
+ return;
+ }
RequestHeader requestHeader = (RequestHeader) annotation;
parameter.setRequired(requestHeader.required());
}
diff --git
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestParamAnnotationProcessor.java
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestParamAnnotationProcessor.java
index 8ad9a4b41..d7cfa484b 100644
---
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestParamAnnotationProcessor.java
+++
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestParamAnnotationProcessor.java
@@ -17,6 +17,7 @@
package
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
+import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
import
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
import org.springframework.web.bind.annotation.RequestParam;
@@ -44,6 +45,11 @@ protected void fillParameter(Object annotation,
OperationGenerator operationGene
QueryParameter parameter) {
super.fillParameter(annotation, operationGenerator, paramIdx, parameter);
+ String defaultValue = getAnnotationParameterDefaultValue(annotation);
+ if (StringUtils.isNotEmpty(defaultValue)) {
+ parameter.setRequired(false);
+ return;
+ }
RequestParam requestParam = (RequestParam) annotation;
parameter.setRequired(requestParam.required());
}
diff --git
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestPartAnnotationProcessor.java
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestPartAnnotationProcessor.java
index 859235a70..ff7530348 100644
---
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestPartAnnotationProcessor.java
+++
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestPartAnnotationProcessor.java
@@ -17,6 +17,7 @@
package
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
+import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.generator.core.OperationGenerator;
import
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractParameterProcessor;
import org.springframework.web.bind.annotation.RequestPart;
@@ -43,6 +44,11 @@ protected void fillParameter(Object annotation,
OperationGenerator operationGene
FormParameter parameter) {
super.fillParameter(annotation, operationGenerator, paramIdx, parameter);
+ String defaultValue = getAnnotationParameterDefaultValue(annotation);
+ if (StringUtils.isNotEmpty(defaultValue)) {
+ parameter.setRequired(false);
+ return;
+ }
RequestPart requestPart = (RequestPart) annotation;
parameter.setRequired(requestPart.required());
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Springmvc, when have defaultValue, required should be false
> -----------------------------------------------------------
>
> Key: SCB-925
> URL: https://issues.apache.org/jira/browse/SCB-925
> Project: Apache ServiceComb
> Issue Type: Bug
> Components: Java-Chassis
> Reporter: WeiChao
> Assignee: WeiChao
> Priority: Major
> Fix For: java-chassis-1.1.0
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)