OSGI Enroute DTO中的字符串被“压缩”

时间:2017-09-14 21:39:15

标签: java json osgi enroute

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

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

问题是在使用String内容超过 21个字符的DTO进行回复时,该值正在“压缩”。尝试使用我收到的值(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的{​​{1}} 内容类型设置为_response():我在Chrome网络控制台中看到的结果仍然是压缩字符串< / LI>

1 个答案:

答案 0 :(得分:1)

我写了DTO.toString方法。清楚地记录了输出的格式没有指定,它既可以用作调试工具,也不用于序列化。这就是为什么impl&#34;压缩&#34;字符串。

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