Spring MVC Data Binding:将参数绑定到具有不同名称的对象字段

时间:2014-11-21 12:28:32

标签: spring spring-mvc

这是我的@Controller

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

这里是Member class:

class Member {
    private Integer id;
    private String username; 

    // ... ...
}

这是请求网址:

/add?memberId=1&username=bruce

如何将memberId参数绑定到Member.id字段? 谢谢!

3 个答案:

答案 0 :(得分:3)

如果您不想使用

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

你可以实现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, ...);
    }
}

在配置中:

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

或JavaConfig:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
 ...
  @Override
  public void addArgumentResolvers(List<Handlermethodargumentresolver> argumentResolvers) {
        argumentResolvers.add(new MemberHandlerMethodArgumentResolver());
  }
}

答案 1 :(得分:3)

恕我直言,最简单的方法是在Member类中使用额外的setter:

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;
    }

    // ... ...
}

答案 2 :(得分:0)

您可以使用 @JsonProperty 注释。如下所示。

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

    // ... ...
}