我正在使用HAL-规范框架:
https://github.com/surech/halarious
http://confluence.surech.ch/display/HAL/halarious+Home
specification.html
在使用自定义命名策略时,似乎没有正确转换嵌入式资源字段名。只有“非HAL”字段正在转换。
问题:是否有方法确保自定义命名约定应用于嵌入式资源,而不仅仅是常规字段?
我在自定义MessageBodyWriter中有以下Gson配置..。
GsonBuilder builder = new GsonBuilder();
builder.setFieldNamingStrategy(new AllLowercaseFieldNamingStrategy());
builder.registerTypeAdapter(HalResource.class, new HalSerializer());
builder.setExclusionStrategies(new HalExclusionStrategy());
Gson gson = builder.create();
try (OutputStreamWriter writer = new OutputStreamWriter(entityStream)) {
writer.write(gson.toJson(resource, HalResource.class));
}AllLowercaseFieldNamingStrategy实现简单地将字段名转换为小写,如so @Override public String translateName(Field f) { return f.getName().toLowerCase(); }。
例如:
public class MyResource implements HalResource {
private final String myField;
private final MyResource myEmbeddedResource;
...
}结果在不一致的字段名(应该是所有小写基于命名策略)。
{
"myfield": "...",
"_embedded": {
"myEmbeddedResource": {...}
}
} 发布于 2017-03-31 12:49:08
我的解决方案是使用@HalEmbedded注释并直接分配小写名称。
public class MyResource implements HalResource {
private final String myField;
@HalEmbedded(name = "myembeddedresource")
private final MyResource myEmbeddedResource;
...
}已为该项目创建了一个问题:https://github.com/surech/halarious/issues/21
https://stackoverflow.com/questions/41929978
复制相似问题