我目前的任务是使用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>
答案 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。