2017-09-14 36 views
1

我目前的任务是使用OSGI Enroute(http://enroute.osgi.org/)和Angular(尽管我们选择使用Angular2/4而不是捆绑的AngularJS)来构建应用程序。OSGI Enroute DTO中的字符串被压缩

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

问题是一个DTO响应以超过21个字符价值越来越String内容时“压缩”。当我尝试使用我收到的值(一个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响应中避免这个值“压缩”,我缺少了什么?

事情我已经试过

  • (即作品之一)覆盖由DTO提供的toString()方法。这工作,但似乎并不是最好的解决方案。然后,我必须重写toString()以查找可能具有超过21个字符的字符串值的任何内容。该文档表明意图是用于调试,这可能意味着我没有返回正确的类型?
  • 设置request_response()内容类型application/json:我在Chrome Web控制台看到的结果仍然是一个压缩的字符串

回答

1

我写的DTO.toString方法。清楚地表明输出的格式没有被指定,并且它被用作调试工具而不是用于序列化。这就是为什么impl“压缩”字符串。

如果你需要序列化一个DTO,你需要使用代码来达到这个目的。有关可将DTO转换为JSON等格式的API,请参阅https://github.com/osgi/osgi.enroute/blob/master/osgi.enroute.base.api/src/osgi/enroute/dto/api/DTOs.java

+0

也许我误解了一些例子......那么,方法应该返回一个'String',然后调用一个'DTOs'方法来返回它,而不是直接返回一个DTO? – Jaedabee

+0

DTO对象在它们的表单中很有用,如果你需要序列化/反序列化它们,你需要使用一些代码来达到你想要的格式。例如,JSON,XML,YAML,... DTOs类是一种API,它具有用于DTO对象序列化和反序列化的方法。 –