Ufo666
V2EX  ›  问与答

springboot 用实体类接受参数后如果想获取完整请求数据怎么办?

  •  
  •   Ufo666 · Sep 23, 2022 · 2418 views
    This topic created in 1506 days ago, the information mentioned may be changed or developed.

    在 controller 那里,如果我用一个实体类接收参数,那我日志如何获取本次请求携带的完整 body ?(例如一些错误数据,攻击的非法数据等等) 我能想到的就是直接用 JsonObject 或者 map 或者 string 来接受 。。大佬们还有其他办法吗

    14 replies  •  2022-09-24 15:08:33 +08:00
    cameco
    cameco
    Sep 23, 2022 via iPhone
    1
    request 怎么样
    Ufo666
    Ufo666
    OP
    Sep 23, 2022
    2
    @guisheng 我试过在 aop 那里拿到 request 再拿 body ,但拿出来的只有 params..我再去研究研究
    ToDyZHu
    ToDyZHu
    Sep 23, 2022
    3
    写个 aop 在里面用可以获取到接口方法的参数 是 Object[] 你怎么处理都行
    wolfie
    wolfie
    Sep 23, 2022
    4
    在 filter 搞。
    再看看 Http 包含哪些信息。操作 HttpServetRequest
    lyhang
    lyhang
    Sep 23, 2022
    5
    HttpServletRequest
    Ufo666
    Ufo666
    OP
    Sep 23, 2022
    6
    request.getReader()和 request.getParameter("key") 方法读取一次,重复读取会报 java.io.IOException: Stream closed 异常
    Ufo666
    Ufo666
    OP
    Sep 23, 2022
    7
    框架已经读了一次了,我再读会报错
    lyhang
    lyhang
    Sep 23, 2022
    8
    request.getParameterNames()
    然后循环取
    Ufo666
    Ufo666
    OP
    Sep 23, 2022
    9
    @ToDyZHu aop 拿到的 request 是读取过的了,不能再读了
    ningmengmao
    ningmengmao
    Sep 23, 2022 via Android
    10
    可以自定义 http message coverter ,在类型反序列化时操作
    doraon
    doraon
    Sep 23, 2022
    11
    重写 HttpRequestWrapper
    v2eb
    v2eb
    Sep 23, 2022 via Android
    12
    重写的时候注意, 上传文件请求需要重写的方法不太一样, 可以直接放行
    swczxf
    swczxf
    Sep 23, 2022 via iPhone
    13
    @Ufo666 你都知道只能读取一次了,怎么解决不就百度一下的事情吗
    qinxi
    qinxi
    Sep 24, 2022
    14
    spring 已经提供好了 CommonsRequestLoggingFilter

    开启一下就行
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   695 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 19:55 · PVG 03:55 · LAX 11:55 · JFK 14:55
    ♥ Do have faith in what you're doing.