Jos*_*osé 5 java spring hateoas
我们使用Spring Hateoas项目实现了RESTful Web服务.此项目可以轻松地将您的域类转换为提供"自我"链接等的资源.
我觉得这种方法令人困惑的是你在使用GET时返回资源类,但是当你做POST或PUT时你会使用域模型.这意味着使用RESTful API的任何客户端都需要访问域类+资源类(导致客户端必须将Hateoas项目添加为依赖项).这种方法可以在这篇博客文章中看到.
这里的正确方法是什么?仅用于资源类(对于POST和PUT)?
并非每个域类都有匹配的资源.假设对象图更复杂并且资源具有子对象列表:
public class StoreResource {
public String name;
public List<Location> children;
}
Run Code Online (Sandbox Code Playgroud)
Location对象没有任何资源类.
现在看起来我们需要向客户端提供域类+现有资源类.
在我们的项目中,我们使用类似的方法。是的,在这种情况下,客户端库确实有 Spring HATEOAS 作为依赖项。例如,我们将领域模型共享为一组接口。服务器实体和客户端资源都实现这些接口以保持一致性。
通用接口示例:
package com.example.cookbook.model;
interface RecipeDetails {
String getTitle();
List<? extends IngredientExcerpt> getIngredients();
}
Run Code Online (Sandbox Code Playgroud)
服务器实体示例:
package com.example.cookbook.server.model;
@Entity
public class Recipe implements AbstractPersistable<Long> {
/**
* Recipe details projection.
*/
@Projection(name="details", classes=RecipeEntity.class)
public interface RecipeDetailsProjection extends RecipeDetails {
@Override
List<IngredientExcerptProjection> getIngredients();
}
private List<Ingredient> ingredients;
private String title;
... // getters, setters
}
Run Code Online (Sandbox Code Playgroud)
客户资源示例:
package com.example.cookbook.client.model;
public class RecipeDetailsResource extends ResourceSupport implements RecipeDetails {
private List<IngredientExcerptResource> ingredients;
private String title;
... // Getters, setters
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |