Giter Site home page Giter Site logo

thrift-generator's Introduction

thrift-generator

Creating a thrift file via a Java interface

功能列表

  • 支持参数名
  • 支持注释
  • 支持自定义异常

example

public interface ICommonUserService {

	public User login(int id, String name);
	
	public User getUserById(long id);
	
	public boolean saveUser(User user);
	
	public List<User> getUserIds(long id); 
	
	public Map<Long, User> getUserByIds(List<User> ids);
	
	public Map<String, List<User>> getUsersByName(List<String> names);

	public Map<Long, List<Long>> getGroupUsers(List<String> names, List<User> userList, List<Long> lns, long ll);
	
	public List<String> testCase1(Map<Integer,String> num1, List<User> num2, List<String> num3, long num4, String num5);
}
public class ThriftFileBuilderTest {

	private ThriftFileBuilder fileBuilder = new ThriftFileBuilder();
	
	@Test
	public void toOutputstream() throws Exception {
		this.fileBuilder.setSourceDir("src/test/java"); // optional, will generate method order by source code define 
		this.fileBuilder.buildToOutputStream(ICommonUserService.class, System.out);
	}
	
}

执行:

mvn test -Dtest=com.sohu.thrift.generator.builder.ThriftFileBuilderTest

之后会在控制台输出如下信息:

	namespace java com.sohu.thrift.generator.test.thrift

	enum Status {
			NORMAL = 0,
			BLOCKED = 1
	}

	struct Account {
			1:i32 id,
			2:string name
	}
	struct User {
			1:i32 id,
			2:string name,
			3:bool sex,
			4:Status status,
			5:list<i64> ids,
			6:Account account
	}

	service ICommonUserService {
		 	User login(1:i32 id,2:string name),
		 	User getUserById(1:i64 id),
		 	bool saveUser(1:User user)
		 	list<User> getUserIds(1:i64 id),
		 	map<i64, User> getUserByIds(1:list<User> ids),
		 	map<string, list<User>> getUsersByName(1:list<string> names),
		 	map<i64, list<i64>> getGroupUsers(1:list<string> names,2:list<User> userList,3:list<i64> lns,4:i64 ll),
		 	list<string> testCase1(1:map<i32, string> num1,2:list<User> num2,3:list<string> num3,4:i64 num4,5:string num5),
	}

thrift-generator's People

Contributors

dependabot[bot] avatar hongliuliao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

thrift-generator's Issues

对java自定义的泛型对象编译失败

如果我的在接口定义的一个方法里面,返回一个自定义的带泛型的对象,类似ReturnResult
public class ReturnResult implements Serializable {
private String desc = null;
private int code = 0;
private T returnContent;
}
程序处理失败

请问一下,我更新下来之后,执行你的测试代码ThriftStructBuilderTest,结果参数名称都没有

namespace java com.sohu.thrift.generator.test.thrift

enum Status {
		NORMAL = 0,
		BLOCKED = 1
}

struct Account {
		1:i32 id,
		2:string name
}
struct User {
		1:i32 id,
		2:string name,
		3:bool sex,
		4:Status status,
		5:list<i64> ids,
		6:Account account
}

service ICommonUserService {
	 	map<string, list<User>> getUsersByName(1:list<string> arg0),		        	
	 	User login(1:i32 arg0, 2:string arg1),		        	
	 	map<i64, list<i64>> getGroupUsers(1:list<string> arg0, 2:list<User> arg1, 3:list<i64> arg2, 4:i64 arg3),		        	
	 	map<i64, User> getUserByIds(1:list<User> arg0),		        	
	 	User getUserById(1:i64 arg0),		        	
	 	bool saveUser(1:User arg0),		        	
	 	list<User> getUserIds(1:i64 arg0),		        	
	 	list<string> testCase1(1:map<i32, string> arg0, 2:list<User> arg1, 3:list<string> arg2, 4:i64 arg3, 5:string arg4)		        	
}

一个改进建议

生成service方法的时候,没有保留参数名称

我javaservice里面的方法签名是
public GroupMemberListResult getAllGroupMembers(String userId, String groupId);

service里面就变成了
GroupMemberListResult getAllGroupMembers(1:string arg0,2:string arg1)

能否借用javassist这类工具通过反射把参数名获取过来?
不然,生成的thrift文件还要修改下参数名才方便使用

感谢

支持注释/支持异常/支持double/保证生成的方法有序

1.前后端分离,所以这个Thrift文件可以当做接口文档使用,我加了自定义注解,每个字段、方法、类都可以有注释,idl文件里有注释前端不需要其他文档。
答: 已支持
2.Thrift service throw TException 这种情况没有处理。(正在考虑优化一下)
答: 已支持
3.Double没有支持,Thrift是有double的。
答: 之前计划支持, 有bug, 已修复
4.由于getDeclaredMethods()得到的无序数组,导致每次生成idl顺序可能不一致,diff有点多。建议Method排序。
答: 现在生成的顺序是基于源代码定义的顺序, 更加便于查看
以上功能可以通过 mvn test -Dtest=com.sohu.thrift.generator.builder.ThriftFileBuilderTest 命令查看

相关引用: #6

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.