Spring MVC @ResponseBody で Jackson を使用して、jqGrid の JSON を生成しています。jqGrid で必要な JSON には、次のような POJO を使用しています。
public class Grid<T> implements Serializable {
private int totalPages;
private int currentPage;
private long totalRecords;
private List<T> listData;
// getter & setter...
}
次のようなHibernate JPAから取得したドメインモデルを配置しています(一部の属性に遅延フェッチがあるため、プロキシである可能性があります)。
@Entity @Cacheable
public class Item implements Serializable {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Version
private int version;
@NotBlank
private String name;
@JsonIgnore @Lob @Basic(fetch=FetchType.LAZY)
private byte[] image;
// getter and setter...
}
これはSpring MVCコントローラーの私のコードです:
@RequestMapping(value="listgrid", method=RequestMethod.GET, produces="application/json")
@ResponseBody
public Grid<T> listGrid(@RequestParam(value="page", required=false) Integer page,
@RequestParam(value="rows", required=false) Integer rows,
@RequestParam(value="sidx", required=false) String sidx,
@RequestParam(value="sord", required=false) String sord,
@RequestParam(value="_search", required=false) String search) {
// ...
Grid<T> grid = new Grid<T>();
Page<T> objPage = retrieveData(...);
grid.setListData(objPage.getContent());
grid.setCurrentPage(objPage.getNumber()+1);
grid.setTOtalPages(objPage.getTotalPages());
grid.setTotalRecords(objPage.getTotalElements());
return grid;
}
@JsonIgnore をイメージ属性に入れましたが、結果の JSON には常にイメージが含まれます。この属性を無視するには?