支持语言: java8+
解决了后端返回Json数据给客户端,需要大量代码手工拼装数据问题。简单定义视图类即可。
- 定义一个视图接口或者抽象类,标识为@View的注解,便可以快速将model的数据传递至View上
- 方法上添加@RelationView或者@RelationModel便于获取外部关联数据
@View(modelClass = User.class, modelDaoClass = UserDAO.class)
public interface UserView {
String getName();
}
public class UserDAO implements ModelDaoFactory, GetModel<Integer, User> {
public User accept(Integer id) {
return new User("用户名称");
}
@Override
public User getModel(Integer integer) {
return new User("用户名称");
}
@Override
public <T> T getModelDao(Class<T> modelDaoClass) {
return (T)new UserDAO();
}
}
public class TestModel {
private final String name;
private final Integer userId;
public TestModel(String name, Integer userId) {
this.name = name;
this.userId = userId;
}
public String getName() {
return name;
}
public Integer getUserId() {
return userId;
}
}
@View(modelClass = TestModel.class, proxyType = ProxyType.CGLIB)
public abstract class TestView {
public abstract String getName();
@RelationView(bindModelAttrGetMethod = "getUserId()", viewClass = UserView.class)
public abstract UserView getUser();
@RelationModel(bindModelAttrGetMethod = "getUserId()", modelDaoClass= UserDAO.class, modelDaoMethod = "accept(java.lang.Integer)")
public abstract User getUser1();
public String getOwner() {
return "getOwner";
}
public String getOwner2() {
return getOwner() + "2";
}
}
class ModelViewBuilderTest {
@Test
public void build() throws Exception {
ModelViewBuilder modelViewBuilder = new ModelViewBuilder(new UserDAO());
TestView testView = modelViewBuilder.build(new TestModel("testName", 1), TestView.class, new BuildContext());
System.out.println(testView.getName());
System.out.println(testView.getOwner());
System.out.println(testView.getOwner2());
UserView userView = testView.getUser();
System.out.println(userView);
System.out.println(userView.getName());
System.out.println(testView.getUser1());
}
}
- View 标识字段为视图
- RelationView 标识属性关联其他属性
- RelationModel 标识属性关联模型数据
在项目的pom.xml的dependencies中加入以下内容:
<dependency>
<groupId>com.btye102</groupId>
<artifactId>model-view-builder</artifactId>
<version>1.0.0</version>
</dependency>