Как мне заставить @JsonView работать с MapStruct - PullRequest
0 голосов
/ 02 декабря 2018

Поэтому я перевожу все мои контроллеры на использование объекта DTO, как ранее они использовали объекты персистентности.

Я решил использовать для этого MapStruct .

Моя проблема в том, что я, по-видимому, утратил способность применять @JsonView к этому ответу, так как теперь ответ при применении представления равен {} (пусто).

Мой вопрос, должно ли это бытьМожно ли объединить сериализацию MapStruct и Джексона, или мне потребуется создать класс 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));
    }
}
...