1

Here is my @Controller:

@RequestMapping(value = "/add")
    public void addMember(Member member) {
        // ... ...
    }

here is Member class:

class Member {
    private Integer id;
    private String username; 

    // ... ...
}

And here is the request url:

/add?memberId=1&username=bruce

How can I bind the memberId parameter to Member.id field? Thanks!

1
  • You cannot at least not without implementing your own DataBinder. Commented Nov 21, 2014 at 13:02

3 Answers 3

4

If you don't want to use

@RequestMapping(value = "/add")
public void addMember(@RequestParam(value = "username") String username, ...) {
    Member member = new Member(username, ...)
    // ...
}

you can implement HandlerMethodArgumentResolver:

public class MemberHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return Member.class.equals(parameter.getParameterType());
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
       NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        String username = webRequest.getParameter("username");
        ...
        return new Member(username, ...);
    }
}

And in config:

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <bean id="memberResolver" class="com.company ... MemberHandlerMethodArgumentResolver"/>
    </mvc:argument-resolvers>
</mvc:annotation-driven>

or JavaConfig:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
 ...
  @Override
  public void addArgumentResolvers(List<Handlermethodargumentresolver> argumentResolvers) {
        argumentResolvers.add(new MemberHandlerMethodArgumentResolver());
  }
}
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for your answer. I believe this is the standard way to solve the problem
4

IMHO the simplest way to do that is to use an additional setter in Member class :

class Member {
    private Integer id;
    private String username; 

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public void setMemberId(Integer memberId) {  // this one should to the trick
        this.id = memberId;
    }

    // ... ...
}

1 Comment

Thanks for your answer, your solution is the simplest one.
0

You can use @JsonProperty Annotation for it.Like below.

class Member {
    @JsonProperty("memberId")
    private Integer id;
    private String username; 

    // ... ...
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.