我当前的任务是使用 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 控制台中看到的结果仍然是压缩字符串