隐式使用@RequestParam用于DTO字段

时间:2017-07-14 02:37:41

标签: spring-mvc spring-web

控制器

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<PaginatedResponse<User>> getAllUsers(
        @RequestParam(defaultValue = "") String q,
        @RequestParam(defaultValue = "") String[] fields,
        @RequestParam(defaultValue = "") String[] sort,
        @RequestParam(defaultValue = "50") Integer limit,
        @RequestParam(defaultValue = "0") Integer offset,

        @RequestParam(defaultValue = "") String userField1,
        @RequestParam(defaultValue = "") String userField2,
        @RequestParam(defaultValue = "") Boolean userField3,
        @RequestParam(defaultValue = "") ZonedDateTime userField4,
        @RequestParam(defaultValue = "")  String userRoleId5,
        @RequestParam(defaultValue = "")  Long userRoleId6,
        @RequestParam(defaultValue = "")  Long userRoleId7
) {
  //call to service
}

UserDTO

public class UserDTO {
    private String userField1;
    private String userField2;
    private boolean userField3;
    ZonedDateTime userField4;

    @JsonProperty("USERFIELD5")
    private String userField5;

    @JsonProperty("USERFIELD6")
    private Long userField6;

    @JsonProperty("USERFIELD7")
    private Long userField7;

    //getters and setters
}

用户字段在GET / users参数中用于过滤响应中的用户列表。当前代码有效,但我想知道是否有更好的方法来避免控制器中字段的手动定义。

我考虑使用HahsMap获取所有请求参数,但我选择退出,因为我需要检查传递的参数是否有效。

1 个答案:

答案 0 :(得分:0)

使用@ResponseBody

@ResponseBody
@RequestMapping(value = "your mapping here", method = RequestMethod.GET)
public List<User> getUsers() {

}

并使用Jackson或GSON w / e序列化您的用户实体属性

使用gson,您可以序列化您的字段,如

@SerializedName("user_id")
private Integer id;