Java Spring 快捷方式,用于创建具有自定义功能的实体的 DTO



我正在创建一个Spring REST API,它根据请求以不同的方式返回实体JSON。

Class User{
int id;
String name;
String address;
List<Role> roles;
}
@Value
Class UserDto{
@JsonUnwrapped
private User user;
}
@Controller
Class UserController {
public UserDto getUser(int id){...return new UserDto(user);}
}

使用这种方法,我无法自定义用户的 json。

我必须将 dto 创建为:

@Value
Class UserDto{
int id;
String name;
String address;
public UserDto(User user) {
...copy prioperties...
}
}
@Value
Class UserDetailDto extends UserDto {
@JsonSerialize(using = CustomSerializer.class)
List<Role> roles;
public UserDetailDto(User user){
super(user);
this.roles = user.getRoles();
}
}
@Controller
Class UserController {
public UserDto getUser(int id){...return new UserDto(user);}
public UserDetailDto getUserDetail(int id){...return new UserDetailDto (user);}
}

是否有任何快捷方式/注释/库可用于实现相同的结果?我还想知道这是否是正确的方法。

我认为你可以尝试使用Jackson View。这允许您根据 API 对对象有不同的表示形式。

Class User{
int id;
String name;
String address;
List<Role> roles;
}
public class Views {
public static class Public {
}
public static class Internal extends Public {
}
}
Class UserDto {
@JsonView(Views.Public.class)
int id;
@JsonView(Views.Public.class)
String name;
@JsonView(Views.Public.class)
String address;
@JsonView(Views.Internal.class)
List<Role> roles;
}
@Controller
Class UserController {
@JsonView(Views.Public.class)
public UserDto getUser(int id){...return new UserDto(user);}
@JsonView(Views.Internal.class)
public UserDto getUserDetail(int id){...return new UserDetailDto (user);}
}

对于您的模型/DTO,您可以尝试查看Lombok和MapStruct(基于注释处理器(以编写更少的代码。

最新更新