【问题标题】:Custom Spring Data Rest Controller with HATEOAS Support支持 HATEOAS 的自定义 Spring Data Rest Controller
【发布时间】:2018-05-06 14:50:25
【问题描述】:

我正在我的一个项目中实现 Spring Data REST。我必须编写一些自定义存储库才能编写自定义查询。我在我的 REST 存储库前面使用了一个控制器。为了获得 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。

如果有人有任何想法,请提出建议。

【问题讨论】:

    标签: java spring-data-rest spring-hateoas


    【解决方案1】:

    要使用“资源”列表,您可以使用 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);
    

    来自Resourcesjavadoc:

    用于轻松为实体集合创建包装器的通用助手。

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 2016-03-26
      • 2013-10-31
      • 2014-03-07
      • 2014-08-16
      • 2015-03-08
      • 2014-07-05
      • 1970-01-01
      • 2016-05-23
      相关资源
      最近更新 更多