V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bingyiyu
V2EX  ›  Java

springboot post 单参数请求各位是怎么处理的,也是定义一个单参数类吗?

  •  1
     
  •   bingyiyu · 2021-05-31 17:23:00 +08:00 · 3119 次点击
    这是一个创建于 1032 天前的主题,其中的信息可能已经有所发展或是发生改变。
    或者有没有什么奇淫技巧直接在参数里现成定义一个类不用另写文件
    19 条回复    2021-08-06 13:52:40 +08:00
    asanelder
        1
    asanelder  
       2021-05-31 17:32:02 +08:00
    使用 Map 啊
    memedahui
        2
    memedahui  
       2021-05-31 17:35:29 +08:00
    @asanelder 好家伙,我直接好家伙,是个高手
    andy2415
        3
    andy2415  
       2021-05-31 17:40:38 +08:00
    1. Map
    2. Json
    3. 自定义注解
    jorneyr
        4
    jorneyr  
       2021-05-31 17:50:20 +08:00
    单个参数不直接 @RequestParam 获取嘛?
    uselessVisitor
        5
    uselessVisitor  
       2021-05-31 17:52:02 +08:00
    啥意思?@RequestBody ?
    qwerthhusn
        6
    qwerthhusn  
       2021-05-31 18:31:14 +08:00   ❤️ 6
    抛开 Content-Type 谈 POST 参数都是对 HTTP 协议不了解、只会仿照着别人写个接口能调通就 OK 的程序员。

    如果是 application/json,可以直接 @RequestBody XXX str,这样就能直接获取了,但是要求客户端在 Body 体里面直接传这个参数,没有对象包裹。

    提醒你一下,一个数字,一个字符串(需要双引号包裹),一个 true/false/null 都是正确的 JSON 串,只不过反序列化之后得到的是基本类型。

    如果是 application/x-www-urlencoded 或者 multipart/form-data 或者参数直接放在 URL 参数里面,直接 @RequestParam 就行了
    liangdaofeng
        7
    liangdaofeng  
       2021-05-31 18:43:20 +08:00   ❤️ 1
    兄弟,考虑过 pathvalue 吗?
    linbiaye
        8
    linbiaye  
       2021-05-31 18:48:56 +08:00
    ikas
        9
    ikas  
       2021-05-31 18:55:52 +08:00
    这个,如果你是 json,非要支持单参数,实现一个绑定类不就可以了
    DreamSpace
        10
    DreamSpace  
       2021-05-31 20:33:02 +08:00
    如果是收 `"aaa"` 这样的参数,直接 @RequestBody String param 就可以了
    如果是收 `{"id": "aaa"}`这样的参数,又想达到对象复用的效果,建议自己实现一下 Map<String,Object> 接口,写死 key 的值并忽略 key 的输入,并额外提供一个 getValue()方法方便获取 vaulue 。
    vvv7000
        11
    vvv7000  
       2021-05-31 20:35:59 +08:00
    springboot 初学者,据我了解 json 的话用 @RequestBody 反序列化可以,需要客户端在请求体中以对应的格式传参

    放在 URL 里的话,可以通过 @RequestParam 获取
    young1lin
        12
    young1lin  
       2021-05-31 20:50:30 +08:00
    不用参数,我教你一招。
    ```java
    ServletRequestAttributes requestAttributes =(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    String requestParam = requestAttributes.getRequest().getParameter("这里是你的请求参数名称,例如 name 什么的");
    ```
    什么都能拿到,懂我意思吧,如果你学过 Servlet 规范,看过一点点 DispatchServlet 的父类 FrameworkServlet 源码,再了解一点点 ThreadLocal 的知识没,你就懂我意思了。这个算奇淫巧技。

    当然你参数里传 HttpServletRequest request 也是 ok 的,从这个 request 里面拿也是一样的。

    想怎么拿都行。
    xuanbg
        13
    xuanbg  
       2021-05-31 21:19:50 +08:00
    直接 body 里面传个 string 或者 int 不行吗???
    mringg
        14
    mringg  
       2021-05-31 21:42:38 +08:00
    @asanelder 别只用 Map,这里还可以用 List
    asanelder
        15
    asanelder  
       2021-06-01 07:45:32 +08:00
    @mringg #14
    @qwerthhusn #6 学到了
    cs419
        16
    cs419  
       2021-06-01 09:12:10 +08:00
    第一眼
    单参数? 直接取呗
    再琢磨。。。这是用 requestBody 取参数吖
    iminto
        17
    iminto  
       2021-06-01 09:21:34 +08:00
    啥时候 servlet 基础知识成奇技淫巧了。。。
    liian2019
        18
    liian2019  
       2021-06-01 10:47:43 +08:00
    优雅一点就自定义一个注解
    hcen1997
        19
    hcen1997  
       2021-08-06 13:52:40 +08:00
    可以在接口文件中自定义 static class 的一个类, 给上 @data 注解,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   939 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 411ms · UTC 20:56 · PVG 04:56 · LAX 13:56 · JFK 16:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.