簡體   English   中英

具有HATEOAS支持的自定義Spring Data Rest Controller

[英]Custom Spring Data Rest Controller with HATEOAS Support

我正在我的一個項目中實現Spring Data REST。 我必須編寫一些自定義存儲庫才能編寫自定義查詢。 我在REST信息庫前面使用一個Controller。 為了獲得HATEOAS響應,我在控制器中使用PersistentEntityResourceAssembler。 該控制器對於單個實體工作正常,但是在列表的情況下,出現異常“ PersistentEntity不能為null!”。

@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);
        }
    }

我試圖從一開始就利用最大的Spring功能和最少的編碼支持。 我不想為項目中的每個持久性實體編寫一個ResourceAssembler。

如果有人有任何想法,請提出建議。

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

輕松創建實體包裝的通用助手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM