根据@PathVariable更改@RequestBody对象

时间:2016-07-20 09:25:22

标签: spring spring-mvc

以下是我的应用程序代码

@RequestMapping(value = "app/{version}/register", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public RegisterMemberResponse registerMember(@Valid @RequestBody RegisterMemberRequest request,@PathVariable Integer version){
    return registerservice.register(request);
}

对于应用版本1,我的RegisterMemberRequest类是

public class RegisterMemberRequest{
    @NotNull
    private String firstName;
    @NotNull
    private String lastName;

    //gatter & setter...
}

对于应用版本2,我的请求类是

public class LatestRegisterMemberRequest extends RegisterMemberRequest{
    @NotNull
    private String middleName;
    //getter & setter...
}

所以我怎么能改变我的registerMember()方法,以便我可以同时服务于版本1和版本1 2请求uri。

2 个答案:

答案 0 :(得分:0)

如果您想将版本号硬编码到网址中(我不建议这样做),您可以轻松地使用两种不同的控制器方法,使用硬编码路径,例如app/v1/registerapp/v2/register

另一种方法是使用内容协商并根据给定的内容类型路由请求,例如, application/vnd+<YOURCOMPANY>.<DATATYPE_AND_VERSION>+json,也使用带有@Consumes注释的单独的休息控制器方法。

答案 1 :(得分:0)

我认为您可以使用Requestmapping-uri-templates-regex,版本号将是@PathVariable编写您的业务逻辑,以决定响应主体应该依赖于路径变量版本。