我正在使用 HAL 规范框架:
https://github.com/surech/halarious
http://confluence.surech.ch/display/HAL/halarious+Home
http://stateless.co/hal_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
实现只是将字段名称转换为小写,如下所示@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": {...}
}
}
我的解决方法是使用 @HalEmbedded
注释并直接分配一个小写名称。
public class MyResource implements HalResource {
private final String myField;
@HalEmbedded(name = "myembeddedresource")
private final MyResource myEmbeddedResource;
...
}
已为项目创建了一个问题:https://github.com/surech/halarious/issues/21