【发布时间】:2015-07-25 02:44:38
【问题描述】:
我在 Jhipster 项目中使用 Spring-MVC、Spring-data-jpa、jackson。
我设法在一个对象上使用了@JsonView 注释,并且当其余控制器中的方法返回类型ResponseEntity<List<MyObject>> 时它运行良好,但当方法返回类型为ResponseEntity<Page<MyObject>> 时我无法使其运行。
我尝试将MapperFeature.DEFAULT_VIEW_INCLUSION 设置为true(默认为false)。当我这样做时,所有属性都被序列化。但是通过@JsonView 过滤不再起作用了。
我无法修改 Page 对象,因为它是 Spring-data 对象。
我正在寻找一种方法来告诉杰克逊包含Page 对象的所有属性。
这是我的代码:
我的实体:
@Entity
@Table(name = "T_REGION")
public class Region implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "code", nullable = false)
private Integer code;
@Column(name = "name", length = 60, nullable = false)
@JsonView(View.Summary.class)
private String name;
// Getters and setters
}
我的休息控制器:
@RestController
@RequestMapping("/api")
public class RegionResource {
@RequestMapping(value = "/regionsearch1",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@JsonView(View.Summary.class)
public ResponseEntity<Page<Region>> findAll1(
@RequestParam(value = "page" , required = false) Integer offset,
@RequestParam(value = "per_page", required = false) Integer limit,
Sort sort)
throws URISyntaxException {
Pageable pageRequest = PaginationUtil.generatePageRequest(offset, limit, sort);
Page<Region> page = regionRepository.findAll(pageRequest);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/regionsearch1", pageRequest);
return new ResponseEntity<>(page, headers, HttpStatus.OK);
}
@RequestMapping(value = "/regionsearch2",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@JsonView(View.Summary.class)
public ResponseEntity<List<Region>> findAll2(
@RequestParam(value = "page" , required = false) Integer offset,
@RequestParam(value = "per_page", required = false) Integer limit,
Sort sort)
throws URISyntaxException {
Pageable pageRequest = PaginationUtil.generatePageRequest(offset, limit, sort);
Page<Region> page = regionRepository.findAll(pageRequest);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/regionsearch2", pageRequest);
return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
}
}
findAll1 返回:
[
{
"name": "Ile-de-France"
},
{
"name": "Champagne-Ardenne"
},
....
]
findAll2 返回:
{}
对象Page 的属性上没有@JsonView,因此没有属性被序列化。
即使使用了@JsonView,我也无法告诉杰克逊包含所有Page 属性。
有什么想法吗?
【问题讨论】:
-
嗨,我遇到了同样的问题。所以我下载了最新版本的 Spring 源代码,然后我创建了界面,并使用 @JsonView(View.class) 修改了类 Page,然后我编译了它,最后,我创建了一个扩展类 View 以在我的项目中的 Spring MVC。试试吧,你会成功的:D
-
与Spring Data Pagination returns no results with JSONView 重复。在那里可以找到更好的解决方案
标签: spring-mvc jackson spring-data-jpa jhipster