Я использую рамки HAL-Спецификация:Halarious - Встроенные имена полей ресурсов не преобразуются стратегии пользовательских имен
https://github.com/surech/halarious
http://confluence.surech.ch/display/HAL/halarious+Home
http://stateless.co/hal_specification.html
Представляется, что внедренный ресурсное поле имена неправильно преобразуются при использовании пользовательской стратегии именования. Преобразуются только поля «не-HAL».
Вопрос: Существует ли способ обеспечить, чтобы пользовательские соглашения об именах применялись к встроенным ресурсам, а не только к обычным полям?
У меня есть следующая конфигурация Gson в пользовательской MessageBodyWriter ...
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": {...}
}
}