Openagv的Controller层,主要是用于http方式调用时,作控制层用,与spring等框架的作用是一致的。而opentcs本来已经支持webapi方式进行访问的,是sprakjava+jetty的组合方式,在这个基础上,扩展了一个源码,直接让系统在启动时扫描并注册Controller到系统,通过请求的URI地址,将请求转到对应的Controller上,现在对Controller类里的约定与注解描述一下.
1,新建 UserController
@Controller @Mapping(value = "/system/user", desc = "用户管理") public class UserController extends BaseController<User> { @Import private UserService userService; /** * 注册用户 * * @return ReturnDto */ @Mapping(value = "/register", desc = "注册用户") public ReturnDto register() { try { return buildReturnDto(userService.register(getBean(RegisterDto.class))); } catch (RobotException e) { return buildReturnDto(e); } } }
这里的@Controller注解为必须,告知系统这个类为Controller类,@Mapping注解用于与URI作映射关系的,其value值就是对应的URI,如果不填写的话,将以文件名去掉Controller后作为URI地址。
BaseController作为Controller的基类,如果传入泛型,则在系统启动时,会自动实现User实体类的CURD功能(需要配合UserService使用)。以save为例,在系统启动时,你会发现日志打印/system/user/save的URI路径。
同时,如果你需要自行实现CURD功能,继承BaseController类后,泛型值传入Object即可。
@Import,是框架的DI注解,用于注入Service类
Controller的Method的@Mapping是用来确定这个方法的映射路径,如果不设置,则以方法名作为URI路径(区分大小写)。如上图中的注册,它的URL地址为:
http://localhost:55200/system/user/register
框架目前支持get,post,put三种方式的请求,方法在参数时,不区分get或post请求
getBean方法为BaseController方法,当提交方式为post时,提交数据为符合RegisterDto的json序列化时,会自动转为Dto对象返回。
getJson方法,返回提交上来的json字符串。
同样,可以用getValue的方法,只取某一key值,例如get请求时,参数name=laotang,在方法内,可以直接使用getValue("name")取值,基类还提供了getIntValue,getDoubleValue等方法
更多的功能,在使用时可以进行探索!
来源:oschina
链接:https://my.oschina.net/tcrct/blog/4274850