Java Spring框架中哪种请求参数映射策略最好?
我是JavaWeb开发人员,通常开发SpringMVC 我一直在使用@RequestMapping或@RequestParam来映射到控制器上的hashMap 这是一种可怕的方式。在使用value时,我应该始终强制转换type 但现在我尝试使用@modeldattribute在控制器上编写干净的代码 然而,也存在一些问题 案例1)对每个端点进行DTO。 我们可以为每个端点创建DTO,但DTO将具有许多重复的属性Java Spring框架中哪种请求参数映射策略最好?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我是JavaWeb开发人员,通常开发SpringMVC 我一直在使用@RequestMapping或@RequestParam来映射到控制器上的hashMap 这是一种可怕的方式。在使用value时,我应该始终强制转换type 但现在我尝试使用@modeldattribute在控制器上编写干净的代码 然而,也存在一些问题 案例1)对每个端点进行DTO。 我们可以为每个端点创建DTO,但DTO将具有许多重复的属性 @Getter @Setter @ToString class GetUserInf
@Getter
@Setter
@ToString
class GetUserInfoDTO {
private String id;
private String name;
}
@Getter
@Setter
@ToString
class PostUserInfoDTO {
private String name;
private Integer age;
private String address;
private String gender;
private String email;
private Date joinDate;
}
在控制器中
@GetMapping("/user")
public ResultDTO getUserInfo (@ModelAttribute GetUserInfoDTO){
...
return ResultDTO;
}
@PostMapping("/user")
public ResultDTO postUserInfo (@ModelAttribute PostUserInfoDTO){
...
return ResultDTO;
}
在这种情况下,我们可以对每个端点应用独立的验证策略
例如
@Getter
@Setter
@ToString
class GetUserInfoDTO {
@NotNull
private String id;
private String name;
}
@Getter
@Setter
@ToString
class PostUserInfoDTO {
@NotNull
private String name;
@NotNull
private Integer age;
@NotEmpty
private String address;
private String gender;
private String email;
private Date joinDate;
}
像这样
但是制造了这么多模型类,存在着这么多重复的属性
案例2。为每个控制器制作通用DTO。
我们可以为每个控制器制作DTO,并重用它们
@Getter
@Setter
@ToString
class UserInfoDTO {
private String id;
private String name;
private Integer age;
private String address;
private String gender;
private String email;
private Date joinDate;
}
@GetMapping("/user")
public ResultDTO getUserInfo (@ModelAttribute UserInfoDTO){
//I want only id, name
...
return ResultDTO;
}
@PostMapping("/user")
public ResultDTO postUserInfo (@ModelAttribute UserInfoDTO){
...
return ResultDTO;
}
但是在这种情况下,我们只能传递特定的属性
如果有人发送id和名称以外的其他参数,我们不会注意到。(400错误未发生)
代码帮助不能向我们推荐在单个端点使用的特定属性
我不喜欢这些箱子
在第一种情况下,我应该做这么多的模型,它的管理将是如此困难
第二种情况是,存在不必要的属性,很难对每个端点进行验证
哪条路最好
或者您可以推荐另一种将请求参数映射到模型对象的方法吗?我们可以将所有参数和值作为映射实例获取。请检查这个。此方法需要显式代码来填充模型对象。我们可以将所有参数和值作为映射实例来获取。请检查这个。此方法需要显式代码来填充模型对象