当前位置: 首页 > article >正文

了解 Solon MVC 的参数注入规则

关于 Solon MVC 参数注入,主要尊守以下基本规则:

  • 参数名与请求数据名一一对应。
  • 当对上不上时,会采用整体数据注入(如果接收的是实体)
  • 参数名与请求数据同名时,又想整体注入(如果接收的是实体),可使用 @Body 注解强制标注

1、表单参数注入

请求样本数据:

GET http://localhost:8080/demo?select=1&select=2&user=noear

支持单字段注入(要求参数名,与请求数据名一一对应)

@Controller
public class DemoController{
    @Mapping("demo")
    public void demo(String[] select, String user){
    }
}

支持整体注入(要求参数名,不能与请求数据名对应)

public class PostDo{
    public String[] select;
    public String user;
}

@Controller
public class DemoController{
    @Mapping("demo")
    public void demo(PostDo postDo){ //参数名,不能是 select 或 user
    }
    
    @Mapping("demo")
    public void demo(@Body PostDo user){ //参数名如果与数据名相同。需要使用 @Body 来标明它是接收所有请求数据
    }
}

2、结构型参数注入(类似 properties 格式参数)

请求样本数据:

  • ?user.id=1&user.name=noear&user.type[0]=a&user.type[1]=b
  • ?type[]=a&type[]=b
  • ?order[id]=a

此特性,需要引入序列化插件:solon-serialization-properties。规则细节参考“序列化数据注入”。

3、序列化数据注入(比如 json, hessian, protostuff, fury)

请求样本数据:

POST http://localhost:8080/demo
{user:'noear',select:[1,2],data:{code:1,label:'b'}}

支持单字段注入(要求参数名,与请求数据的一级字段名对应)

@Controller
public class DemoController{
    @Mapping("demo")
    public void demo(String[] select, String user){
    }
}

支持整体注入(要求参数名,不能与请求数据的一级字段名对应)

public class PostDo{
    public String[] select;
    public String user;
}

@Controller
public class DemoController{
    @Mapping("demo")
    public void demo(PostDo postDo){ //参数名,不能是 select 或 user
    }
    
    @Mapping("demo")
    public void demo(@Body PostDo user){ //参数名如果与数据名相同。需要使用 @Body 来标明它是接收所有请求数据
    }
}

支持局部注入(要求参数名,不能与请求数据名对应)

public class PostDo{
    public String[] select;
    public String user;
}

public class DataDo{
    public int code;
    public String label;
}

@Controller
public class DemoController{
    @Mapping("demo")
    public void demo(PostDo postDo, String user, DataDo data){ //postDo 接收整体数据,user,data 接收局部数据
    }
}

4、关于枚举注入

  • 基本结构的,传入 name 可自动转换
  • 定制结构的,参考下面的“特殊类型”

5、特殊类型的注入转换

  • 表单数据注入时

借助"转换器",比如请求 ?demo=1 要转换成实体 Demo。示例:

@Component
public class DemoConverter implements Converter<String, Demo> {
    @Override
    public Demo convert(String value) throws ConvertException {
        return Demo.parse(value);
    }
}

//应用示例(http://....?demo=1。 通过转换器把 1 转为 Demo 实体)
@Controller
public class DemoController {
    @Mapping("test")
    public void test(Demo demo){
    
    }
}
  • 序列化数据注入

这个需要,给序列化组件添加对应的解码器,或者使用其特定的注解或特性。


http://www.kler.cn/a/396906.html

相关文章:

  • 压缩指令的使用
  • 一文3000字从0到1带你进行Mock测试(建议收藏)
  • 使用Python实现深度学习模型:智能食品配送优化
  • 我的第一个PyQt5程序
  • Python安装(ubuntu)
  • 数据结构-二叉树及其遍历
  • 鸿蒙实现 web 传值
  • Ubuntu24 上安装搜狗输入法
  • 算法编程题-区间最小数乘区间和的最大值,基于数组中的数字拼接可得的小于目标值的最大数
  • java集合—List常用的方法
  • 性能优化、安全
  • 在Linux环境下部署TiDB可以通过几种不同的方法
  • 【学术论文投稿】云原生后端:解锁高效可扩展应用的魔法世界
  • 深度学习transformer
  • 什么是主成分分析
  • Python_爬虫3_Requests库网络爬虫实战(5个实例)
  • Qt 5.6.3 手动配置 mingw 环境
  • manjaro蓝牙鼠标无法连接问题解决
  • Front Panel Window Bounds 与 Front Panel Window Bounds 的区别与应用
  • burp无法抓app包的原因以及如何测试
  • Android OpenGL ES详解——glTexImage2D方法
  • nacos集群源码解析-cp架构
  • Python Tornado框架教程:高性能Web框架的全面解析
  • 真正的一站式视频出海解决方案
  • Python “文件和IO操作” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业
  • 【书生大模型实战营 闯关材料】入门岛:第4关 玩转HF/魔搭/魔乐社区