1

我当前的任务是使用 OSGI Enroute ( http://enroute.osgi.org/ ) 和 Angular 构建一个应用程序(尽管我们选择使用 Angular2/4 而不是捆绑的 AngularJS)。

到目前为止,一切都很好。我有一个 REST Java 应用程序,它响应来自 Angular 前端的各种请求,但我目前遇到了问题。为了使开发更容易,我在端口 4200 上提供 Angular 代码,后端正在侦听端口 8080。CORS 正在工作,因此我能够在构建代码时发送和接收请求。这可能与问题有关,也可能无关。

问题String是当使用内容超过21 个字符的DTO 进行响应时,该值会被“压缩”。我在尝试使用收到的值 (a 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 Web 控制台中看到的结果仍然是压缩字符串
4

1 回答 1

1

我编写了 DTO.toString 方法。清楚地记录了输出的格式没有指定,它是用作调试工具而不是用于序列化。这就是 impl “压缩”字符串的原因。

如果您需要序列化 ​​DTO,则需要为此目的使用代码。有关可以将 DTO 转换为格式的 API,请参阅https://github.com/osgi/osgi.enroute/blob/master/osgi.enroute.base.api/src/osgi/enroute/dto/api/DTOs.java像 JSON。

于 2017-09-14T22:46:34.430 回答