我正在我的一个项目中实现Spring Data REST。我必须编写一些自定义存储库才能编写自定义查询。我在REST存储库前使用Controller。为了获得HATEOAS响应,我在我的控制器中使用PersistentEntityResourceAssembler。这个控制器适用于单个实体,但是如果是列表,我会得到一个异常" PersistentEntity不能为空!"
@RequestMapping(value="/employmentType", method=RequestMethod.GET, produces="application/hal+json")
@ResponseBody
public ResponseEntity<?> getEmploymentTypes(HttpServletRequest request, HttpServletResponse response,PersistentEntityResourceAssembler resourceAssembler) throws TenantUnavailableException, TenantInvalidException
{
try
{
List<EmploymentType> employmentTypeList = employmentTypeRepository.findAll();
if(null==employmentTypeList || employmentTypeList.size()==0)
return new ResponseEntity<ApiResponse>(new ApiResponse(false, ENTITY_NOT_FOUND),
HttpStatus.NOT_FOUND);
// Accessing the 0th index works fine
//In case of a full list, it throws "Persistant Entity must not be null !" exception
return ResponseEntity.ok(resourceAssembler.toResource(employmentTypeList.get(0)));
}
catch (Exception e)
{
e.printStackTrace();
return new ResponseEntity<ApiResponse>(new AppResponse(false, REQUEST_NOT_PROCESSED),
HttpStatus.INTERNAL_SERVER_ERROR);
}
}
我正在努力利用最大的弹簧功能,而我的最终编码支持最少。我不想为项目中的每个持久实体编写ResourceAssembler。
如果有人有任何想法,请建议。
答案 0 :(得分:1)
使用&#39;资源列表&#39;你可以使用类Resources,例如:
List<EmploymentType> types = employmentTypeRepository.findAll();
Resources<Resource<EmploymentType>> resources = Resources.wrap(types);
resources.add(/* you can add some links here */);
return ResponseEntity.ok(resources);
来自Resources
javadoc:
一般帮助器,可以轻松地为实体集合创建包装器。