Как расставить имена составных атрибутов через дефис в ответе Spring Controllers Json с помощью Katharsis.io

Json:API requires рекомендует использовать дефис для имен составных атрибутов (например, для имени).

...
{
"type": "people",
"id": "9",
"attributes": {
  "first-name": "Foo",
  "last-name": "Bar",
}
...

В Java имена атрибутов, написанные через дефис, не являются допустимыми идентификаторами.

Я использую Katharsis 2.0.1 для создания серверной части службы на основе JSON:API в spring-boot 1.3.0. Мое внешнее приложение вызова/потребления построено с использованием Ember 2.0 и ember-data.

К сожалению, Katharsis, похоже, не преобразует имена составных атрибутов в Java в имена атрибутов с расшифровкой в ​​​​Json.

Это результат, который Katharsis генерирует для ресурса GET /api/customers.

{
 "data": [
   {
     "type": "customers",
     "id": "1",
     "attributes": {
       "cpn": "-1234567",
       "firstName": "John",
  },
  ...

Но это должно быть "first-name": "John"

Я пропустил какую-то настройку или как указать Katharsis использовать атрибуты дефиса?

Спасибо!


person Pascal    schedule 26.11.2015    source источник


Ответы (3)


Следуя совету @Ethans, я придерживаюсь атрибутов camelCase в Katharsis.io и позволяю Ember переопределять имена атрибутов.

В Ember JSONAPISerializer поддерживает все случаи в том смысле, что он предоставляет ловушки, которые легко переопределяются. Документы для keyForAttribute и keyForRelationship приведены примеры настройки ключей.

В моем случае мне пришлось реализовать следующий класс сериализатора:

// app/application/serializer.js or app/serializers/application.js 

import Ember from 'ember';
import DS from 'ember-data';

export default DS.JSONAPISerializer.extend({
 keyForAttribute: function(attr, method) {
  return Ember.String.camelize(attr);
},

 keyForRelationship: function(key, relationship, method) {
  return Ember.String.camelize(key);
 }
});
person Pascal    schedule 30.11.2015

JSON:API не требует, чтобы атрибуты, состоящие из нескольких слов, использовали дефис; он просто рекомендует это делать.

И эта рекомендация, имхо, глупа именно по тем причинам, которые вы описываете. Это только усложняет взаимодействие. Поэтому я бы посоветовал просто игнорировать рекомендацию и придерживаться атрибутов camelCase. Опять же, нет ничего в том, чтобы делать то, что запрещено.

Некоторые (глупые) инструменты могут предполагать, что ваш API следует пунктирной рекомендации. Но если инструмент предполагает это и не дает вам возможности переопределить это предположение, то это ошибка в этом инструменте, и вы окажете сообществу услугу, показав авторам инструмента, что они должны поддерживать все допустимые Использование JSON:API, а не только то, что следует рекомендации.

P.S. Хотя вышеизложенное является всего лишь моим мнением/советом, я являюсь одним из редакторов JSON:API, поэтому это обоснованное мнение, и факты, которые я упоминаю (например, о том, что дашеризация является просто рекомендацией), верны.

person Ethan    schedule 29.11.2015
comment
Вы абсолютно правы, я с вами согласен! В моей конкретной проблеме (дурацкий) инструмент Ember оказался не таким уж дураком. Ember предполагает, что ваш API следует дашеризованной рекомендации, но также предоставляет способ переопределить рекомендуемый способ. Благодаря вашему совету я узнал, что мне нужно было искать, и мог найти решение. Большое спасибо! - person Pascal; 30.11.2015

В новейшей версии добавлена ​​поддержка PropertyNamingStrategy от jackson , так что доступны переносы имен.

person masterspambot    schedule 27.01.2016
comment
Я столкнулся с некоторыми проблемами при обновлении до последней версии Katharsis. Но я дам вам знать и обновлю свой вопрос/ответ, как только он заработает. Ваше здоровье - person Pascal; 27.01.2016