因此,我将所有控制器迁移到使用 DTO 对象,就像以前他们使用持久性对象一样。
为此,我选择使用MapStruct。
我的问题是我似乎失去了应用@JsonView
此响应的能力,因为现在应用视图时的响应是{}
(空的)。
我的问题是,这是否可以结合 MapStruct 和 Jackson 序列化,或者我是否需要为我当前使用的每个视图创建一个 DTO 类?
我的班级结构如下:
@Entity
public class User {
@JsonView(View.Summary.class)
private Long id;
@JsonView(View.Summary.class)
private String name;
// Etc
}
public class UserDto {
@JsonView(View.Summary.class)
private Long id;
@JsonView(View.Summary.class)
private String name;
// Etc
}
@Mapper
public interface UserMapper {
User toUser(UserDto userDto);
UserDto toUserDto(User user);
}
public class UserController() {
@JsonView(View.Summary.class)
@RequestMapping(path = "/users", method = RequestMethod.GET, produces = "application/json")
public Page<UserDto> userPage(@RequestParam MultiValueMap<String, String> filters, Pageable page) {
return service.findAllUser(filters, page).map(mapper::toUserDto);
}
@JsonView(View.Summary.class)
@RequestMapping(path = "/users/{id}", method = RequestMethod.GET, produces = "application/json")
public UserDto singleUser(@PathVariable("id") Long id) {
return mapper.toUserDto(service.findById(id));
}
}