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:

assign values in constructor. not good, because may need different defaults different methods. write custom databinder. better, problem different defaults still exists. write custom databinder , custom annotation defaults.

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

Popular posts from this blog

java - How to set log4j.defaultInitOverride property to false in jboss server 6 -

c - GStreamer 1.0 1.4.5 RTSP Example Server sends 503 Service unavailable -

Using ajax with sonata admin list view pagination -