您好我正在寻找Eclipse中的解决方案/插件,以保持服务器端Java DTO属性及其客户端JSON对应程序在代码库的整个演变过程中保持一致。例如,对于具有Java后端的Web应用程序,通过REST接口(使用Jackson)公开API,webapp可能在服务器上有类似的内容:
DTO:
public class Person {
private String firstName;
private String lastName;
public Person(String string, String string2) {
firstName = string; lastName = string2;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
REST服务:
@Path("/data")
public class PersonService {
@GET
@Path("persons")
@Produces(MediaType.APPLICATION_JSON)
public List<Person> getAssets() {
List<Person> persons = new ArrayList<Person>();
persons.add(new Person("Jimmy", "Hendrix"));
persons.add(new Person("Roger", "Waters"));
return persons;
}
}
在客户端,在Javascript / JQuery中,我们可以使用以下代码:
$.ajax('/data/persons/', function(data){
for(var i = 0; i < data.length; i++){
var firstName = data[i].firstName;
var lastName = data[i].lastName;
//do some stuff to populate the view with the person data
}
});
设置起来非常简单。但是,随着代码库的发展和变化(一如既往),假设需要将DTO字段的名称从“firstName”和“lastName”更改为“foreName”和“surName”。
在Eclipse中,使用Refactor菜单项重构所有Java代码很简单,该菜单项将在Java代码中找到方法/字段的所有引用,并替换它们。请注意,Eclipse的“Refactor ...”与“查找/替换”操作不同。查找/替换会对指定的所有文件执行基本文本替换。另一方面,重构考虑到Java是强类型编程语言,并搜索具有该签名的所有方法调用。
如果有一些插件或Eclipse功能足够聪明,可以在Javascript代码中更改对“firstName”和“lastName”的引用,那将是很棒的。这样可以节省开发人员只需要为Java代码执行Refactor,然后在Javascript代码中进行选择性查找/替换,并减少潜在的运行时错误。有谁知道这样的工具/插件是否存在?
答案 0 :(得分:1)
是的,我也是。这似乎是我在每个工作中遇到的模式。
我过去所做的最好的事情是从java DTO生成Javascript存根,并使用JsDoc来指示这些javascript DTO的使用位置。
如果我今天也在做同样的解决方案,我可能会看到Swagger codegen会让我开箱即用。
Intellij至少会突出显示javascript中缺少的字段,这很有帮助。
如果有一个插件会很棒,但这总比没有好。
使用打字稿,你甚至可以通过存根获得编译安全性。
答案 1 :(得分:1)
对于您在问题中提供的JavaScript代码段,可能无法编写此类工具。
但是,您可以采取一些措施来改善这种情况。
一方面,您可以为DTO的JavaScript表示编写生成器。 IDE友好的策略是生成具有默认值属性的对象。像
var Person = { firstName: "", lastName: "", roles:[] };
即使您没有将此类文件主动集成到实际的Web UI中,也可以通过检查IDE将向您发出的警告来帮助减少拼写错误。
另一方面,您可以/应该使用真正的JavaScript模型层。然后,您可以在自动化测试期间和/或使用例如特殊按钮验证所有DTO JavaScript表示。 QA始终在发布之前验证的UI的维护部分。如果您将Web UI与服务器一起升级,那么它肯定有助于捕获错过的重构剩余时间。
验证端点将收到如下的JSON对象:
{ "Person": {...}, "Address": {...}, "Item": {...}, ... }
使用一些Java反射,使用DTO对包进行运行。当然,您也可以在Java中使用Nashorn引擎直接在服务器上进行验证,例如在服务器启动期间。
它不是一颗银弹,它可以极大地帮助减少错误。最后,UI中的逻辑不那么模糊,重构更容易。创建或使用通用的通用组件,将它们连接到使用标签查找表的非常薄的转换层中的DTO,这也可以进行验证。也有助于i18n。
生成和验证可以在一个项目中单独使用或一起使用。
BTW,几年前为UI层选择GWT的原因之一就是实现你想要的。我有一段时间没有关注它,但很难想象它的缺点会超过这个好处。答案 2 :(得分:0)
没有这样的插件。欢迎来到非静态类型的语言世界。