首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用自定义命名策略转换的内嵌资源字段名

不使用自定义命名策略转换的内嵌资源字段名
EN

Stack Overflow用户
提问于 2017-01-30 06:17:04
回答 1查看 65关注 0票数 0

我正在使用HAL-规范框架:

https://github.com/surech/halarious

http://confluence.surech.ch/display/HAL/halarious+Home

specification.html

在使用自定义命名策略时,似乎没有正确转换嵌入式资源字段名。只有“非HAL”字段正在转换。

问题:是否有方法确保自定义命名约定应用于嵌入式资源,而不仅仅是常规字段?

我在自定义MessageBodyWriter中有以下Gson配置..。

代码语言:javascript
复制
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(); }

例如:

代码语言:javascript
复制
public class MyResource implements HalResource {
   private final String myField;
   private final MyResource myEmbeddedResource;
   ...
}

结果在不一致的字段名(应该是所有小写基于命名策略)。

代码语言:javascript
复制
{
    "myfield": "...",
    "_embedded": {
        "myEmbeddedResource": {...}
    }
} 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-31 12:49:08

我的解决方案是使用@HalEmbedded注释并直接分配小写名称。

代码语言:javascript
复制
public class MyResource implements HalResource {
   private final String myField;
   @HalEmbedded(name = "myembeddedresource")
   private final MyResource myEmbeddedResource;
   ...
}

已为该项目创建了一个问题:https://github.com/surech/halarious/issues/21

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41929978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档