我目前的任务是使用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控制台看到的结果仍然是一个压缩的字符串
也许我误解了一些例子......那么,方法应该返回一个'String',然后调用一个'DTOs'方法来返回它,而不是直接返回一个DTO? – Jaedabee
DTO对象在它们的表单中很有用,如果你需要序列化/反序列化它们,你需要使用一些代码来达到你想要的格式。例如,JSON,XML,YAML,... DTOs类是一种API,它具有用于DTO对象序列化和反序列化的方法。 –