Строки в OSGI Enroute DTO "сжаты"

Моя текущая задача - создать приложение, используя OSGI Enroute ( http://enroute.osgi.org/) и Angular (хотя мы решили использовать Angular2/4 вместо связанного AngularJS).

Все идет нормально. У меня есть REST Java-приложение, которое отвечает на различные запросы от внешнего интерфейса Angular, но в настоящее время я сталкиваюсь с проблемой. Чтобы упростить разработку, я передаю код Angular на порт 4200, а серверная часть прослушивает порт 8080. CORS работает, поэтому я могу отправлять и получать запросы при создании кода. Это может или не может быть связано с проблемой.

Проблема заключается в ответе с DTO с String содержание, превышающее 21 символ, значение становится "сжатым". Я заметил это при попытке использовать полученное значение (UUID) как ключ к последующему GET запрос. Проверка DTO класс я подтвердил, что toString() метод действительно вызывает частный compress метод, в котором он принимает любую строку длиннее 21 символа и возвращает что-то похожее на this nine...last nine что, как правило, затрудняет повторное получение UUID от... {"uuid":"95b90155-...ee5c02200", "name":"My Object"}...

Итак... учитывая что-то вроде этого:

import org.osgi.dto.DTO;

public final class MyDTO extends DTO
{
   public String uuid;
   public String name;
}

и REST-приложение, подобное этому:

@RequireBootstrapWebResource(resource="css/bootstrap.css")
@RequireWebserverExtender
@RequireConfigurerExtender
@Component(name="web", propery={"debug=true"})
public final class MyApplication implements REST
{
   private boolean debug = false;

   public MyDTO getMe(RESTRequest request)
   {
      MyDTO dto = new MyDTO();
      dto.name = "My Object";
      dto.uuid = UUID.randomUUID().toString();
      return dto;
   }

   @SuppressWarnings("unused")
   @Activate
   void activate(ComponentContext component, BundleContext bundle, 
                 Map<String, Object> config)
   {
      if ("true".equals(config.get("debug"))
      {
         debug = true;
      }
   }
}

что я пропускаю, чтобы избежать "сжатия" значения в моих ответах JSON?

Вещи, которые я пробовал

  • (Тот, который работает) переопределение toString() метод предоставлен DTO, Это работает, но не кажется, что это лучшее решение. Тогда мне пришлось бы переопределить toString() для всего, что может иметь строковое значение, превышающее 21 символ. В документации указано, что целью является отладка, что, вероятно, означает, что я не возвращаю правильный тип?
  • Настройка request"s _response()Тип контента для application/json: результат, который я вижу в веб-консоли Chrome, по-прежнему представляет собой сжатую строку

1 ответ

Решение

Я написал методы DTO.toString. Четко задокументировано, что формат выходных данных не указан и что он предназначен для использования в качестве средства отладки, а не для сериализации. Вот почему impl "сжимает" строки.

Если вам нужно сериализовать DTO, вам нужно использовать код для этой цели. См. https://github.com/osgi/osgi.enroute/blob/master/osgi.enroute.base.api/src/osgi/enroute/dto/api/DTOs.java для API, который может преобразовывать DTO в формат как JSON.

Другие вопросы по тегам