Controller类的使用

◇◆丶佛笑我妖孽 提交于 2020-08-10 22:13:06

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等方法

更多的功能,在使用时可以进行探索!

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!