如何在自定义RestController中的GET请求中从HATEOAS uri反序列化spring数据jpa实体

时间:2018-07-30 12:12:27

标签: java spring jpa hateoas

我的自定义Spring RestController中存在一个问题,该问题需要引用spring-data-jpa实体作为其在GET请求中的输入。这是我的代码:

我有一个称为“ AreaModel”的spring数据jpa实体。它只是具有一些String属性:

@Entity
@Table(name = "areas")
public class AreaModel {
  @Id
  @GeneratedValue(strategy= GenerationType.AUTO)
  public Long id;

  public String title;
  public String description;
  [...]
}

此JPA实体也通过spring-data-rest作为spring-hateoas rest存储库公开:

@RepositoryRestResource(collectionResourceRel = "areas", path = "areas", itemResourceRel = "area")
public interface AreaRepo extends CrudRepository<AreaModel, Long> {
  [...]
}

通过GET和POST到该其余端点的CRUD操作可以正常工作。

但是现在我有了一个需要AreaModel作为其输入的自定义控制器。客户请求一个给定区域的“令牌”。客户只知道该区域的“ HATEOAS ID”。 HATEOAS ID实际上是URI,例如/ myBasePath / areas / 4711

这是我(尚未工作)的自定义休息控制器:

@BasePathAwareController
public class VoteRestController {

  @RequestMapping(value = "/getToken")
  public @ResponseBody Map getToken(@RequestParam("area")AreaModel area, @AuthenticationPrincipal UserModel user) throws LiquidoException {
    log.info(user+" requests a voter token for area "+area);


  }

我要开始工作的客户要求是

GET /myBasePath/getToken?area=/myBasePath/areas/4711

我在Spring异常中遇到的错误是:

"exception": "org.springframework.web.method.annotation.MethodArgumentTypeMismatchException",
"message": "Failed to convert value of type 'java.lang.String' to required type 'org.doogie.liquido.model.AreaModel'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.lang.Long] for value '/liquido/v2/areas/42'; nested exception is java.lang.NumberFormatException: For input string: \"/liquido/v2/areas/42\"",
"path": "/liquido/v2/getToken"

预期结果

如何将(引用)spring-data-hateos资源作为GET请求的请求参数传递给自定义的rest控制器?

0 个答案:

没有答案