【问题标题】:Is there any way to put @JsonView on Controller method with QueryResult returnType?有没有办法将@JsonView 放在带有 QueryResult returnType 的 Controller 方法上?
【发布时间】:2017-02-03 08:13:01
【问题描述】:

我有一个ViewModel 并根据this post of spring.iojsonannotation 放在某些字段上,如下所示:

public class SurveyViewModel{
    @JsonView(View.Summary.class)
    private Long     id;
    @JsonView(View.Summary.class)
    private String   title;
    private String   description;
    private String   endDate;
    //Here is getters & setters
}

当我从我的REST Controller 中检索数据时,如果我的方法的返回类型是List,则 json-result 是可以的:

@RequestMapping(value = "/getAllGrid", method = RequestMethod.GET)
@JsonView(View.Summary.class)
@ResponseBody
public List<SurveyViewModel> getAll{
    return ModelMapper.mapList(iSurveyService.getAll(), SurveyViewModel.class);
}

但是当我对结果应用分页并将此方法的返回类型更改为QueryResult 时,json-result 为空:

@RequestMapping(value = "/getAllGrid", method = RequestMethod.GET)
@JsonView(View.Summary.class)
@ResponseBody
public QueryResult<SurveyViewModel> search(String order, int pageNumber, int pageSize) {
    return ModelMapper.mapQueryResult(iSurveyService.getAllGrid(new SearchOption("", order, pageNumber, pageSize)), SurveyViewModel.class);
}

当我使用上述方法对结果应用分页时,pageNumber, totalRecords &amp; pageSize 添加到我的 json 结果中,原始数据添加到 entityList 作为内部 json 对象,这里是 myQueryResult 的 json 格式 without 申请@JsonView:

{
"pageNumber" : 0,
"totalRecords" : 1,
"pageSize" : 10,
"entityList" : [{
        "id" : 1,
        "title" : "survey1",
        "description" : "...",
        "endDate" : "2017/01/18",
        },{
        "id" : 2,
        "title" : "survey2",
        "description" : "...",
        "endDate" : "2016/11/18",
    }]
}

现在我的问题是,有没有办法将@JsonView 放在带有QueryResult returnType 的控制器方法上?

【问题讨论】:

    标签: java json spring-mvc jackson spring-restcontroller


    【解决方案1】:

    QueryResult 是我用于分页的对象,我通过将@jsonView 放在QueryResult 类的属性上来解决我的问题,如下所示:

    public class QueryResult<T> {
        @JsonView(View.Summary.class)
        private int pageNumber;
        @JsonView(View.Summary.class)
        private int totalRecords;
        @JsonView(View.Summary.class)
        private int pageSize;
        @JsonView(View.SummaryWithRecipients.class)
        private List<T> entityList = new ArrayList<T>();
        //Here is getters & setters
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2014-08-09
      相关资源
      最近更新 更多