java - Spring MVC. Default values for fields of method parameter -
java - Spring MVC. Default values for fields of method parameter -
i have simple controller method test:
@requestmapping(produces = "application/json") @responsebody public httpentity<void> test(test test) { homecoming new responseentity<>(httpstatus.ok); }
test class looks this:
public class test { private string name; private date date; public string getname() { homecoming name; } public void setname(string name) { this.name = name; } public date getdate() { homecoming date; } @datetimeformat(iso= datetimeformat.iso.date) public void setdate(date date) { this.date = date; } }
and need default values fields of test object. if had primitive param, able utilize @requestparam(required = false, defaultvalue = "somevalue")
. non-primitive param approach doesn't seem work. see couple of variants how deal it:
am missing , there built in feature can solve problem?
you can lean on argument resolving, in 4 easy steps, similiar suggested in 3rd point.
create annotation e.g.@target(elementtype.parameter) @retention(retentionpolicy.runtime) @documented public @interface testdefaultvalues { string[] value(); }
write resolver e.g. public class testargumentresolver implements handlermethodargumentresolver { public boolean supportsparameter(methodparameter parameter) { homecoming parameter.getparameterannotation(testdefaultvalues.class) != null; } public object resolveargument(methodparameter parameter, modelandviewcontainer mavcontainer, nativewebrequest webrequest, webdatabinderfactory binderfactory) throws exception { testdefaultvalues attr = parameter.getparameterannotation(testdefaultvalues.class); string[] value = attr.value(); test test = new test(); test.setname(value[0]); test.setdate(new date(value[1])); homecoming test; } }
register resolver <mvc:annotation-driven> <mvc:argument-resolvers> <bean class="your.package.testargumentresolver"></bean> </mvc:argument-resolvers> </mvc:annotation-driven>
use annotation in controller method e.g. public httpentity<void> test(@testdefaultvalues({"foo","11/12/2014"}) test test) {
instantiating date gist of implementation, you'll utilize whatever idea
java spring spring-mvc
Comments
Post a Comment