我有一个Java服务器应用程序,它使用Jackson通过反射API一般地序列化DTO.例如,对于此DTO界面:
package com.acme.library;
public interface Book {
com.acme.library.Author getAuthor();
String getTitle();
}
Run Code Online (Sandbox Code Playgroud)
从这个界面的POJO实现,Jackson将一般序列化以下实体:
{
"author": { "name": "F. Scott Fitzgerald"},
"title": "The Great Gatsby"
}
Run Code Online (Sandbox Code Playgroud)
将使用我的TypeScript应用程序(基于AngularJS)的HTTP GET接收此有效负载:
$http.get("http://localhost/books/0743273567")
.success((book: Book) => { ... });
Run Code Online (Sandbox Code Playgroud)
因此我能够使用TypeScript的强类型性质,我发现自己手工编写以下的typescript接口:
module com.acme.library {
export interface Book {
author: com.acme.library.Author;
title: String;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我必须保留这个相同界面的两个副本 - 这最多是麻烦的.这变得特别讨厌,因为我想在两个接口上都有相同的javadoc/jsdoc注释,这涉及整个复制和粘贴堆.
我想找到一种自动化这个过程的机制.
Java是我的主要开发语言.因此,我想找到一些能够从Java接口声明(通过反射API?)转换到相关TypeScript接口的工具.
我在这个领域发现的唯一工具是NPM包ts-java.但是,这对我的用例来说太重了.它增加了从对象层次结构的方法给每个接口,例如hashCode(),wait(),getClass()等.
Voj*_*jta 18
你可以使用typescript -generator作为larslonne.它从Java JSON类生成TypeScript接口.您可能会发现一些有用的功能:
以下是如何从Maven中使用它的示例:
<plugin>
<groupId>cz.habarta.typescript-generator</groupId>
<artifactId>typescript-generator-maven-plugin</artifactId>
<version>1.25.322</version>
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
<phase>process-classes</phase>
<configuration>
<jsonLibrary>jackson2</jsonLibrary>
<classes>
<class>com.acme.library.Book</class>
</classes>
<outputFile>target/rest.d.ts</outputFile>
<outputKind>module</outputKind>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
编辑:使用mvn process-classes或使用后续阶段运行它mvn install.
您还可以<configuration>向上拉两个级别并运行mvn typescript-generator:generate.
编辑:我是typescript-generator的作者.
我目前正在开发一个与您的设置相同的项目:Java API 和 Typescript Web 应用程序。
我们在构建 API 时使用cz.habarta.typescript-generator.typescript-generator-maven-plugin它来生成文件。.d.ts然后将定义文件打包为工件<type>d.ts</type>,使用org.codehaus.mojo.build-helper-maven-plugin. 最后,该工件作为 Web 应用程序中的依赖项导入,其中定义文件将解压到目录中target。
此设置要求您对 Web 应用程序使用 Maven,这并不理想,但对于自动生成的定义文件来说,这是一个很小的代价。