我在Jhipster项目上使用Spring-MVC,Spring-data-jpa,jackson。
我设法在对象上使用@JsonView
注释,当rest Controller 中的方法返回类型ResponseEntity<List<MyObject>>
时,它可以很好地工作,但是当方法返回类型为ResponseEntity<Page<MyObject>>
时,我不能使其起作用。
我尝试将MapperFeature.DEFAULT_VIEW_INCLUSION
设置为true(默认为false)。当我这样做时,所有属性都将被序列化。但是通过@JsonView
过滤不再起作用。
我无法修改Page
对象,因为它是Spring数据对象。
我正在寻找一种告诉 jackson 包括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
}
我的休息 Controller :
@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
,因此没有序列化任何属性。
即使使用
Page
,我也无法找到一种方法来告诉Jackson包括所有
@JsonView
属性。
有任何想法吗 ?
请您参考如下方法:
我遇到了同样的问题,我通过将MapperFeature.DEFAULT_VIEW_INCLUSION
设置为true来解决了该问题,但是您应该在要使用JsonView
或JsonIgnore
注释应用 View 的类中为的所有字段注释,以便默认情况下它们不会包含在json 。