Строки в 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.