post方式传参,在程序中获取不到传的值

本文介绍了解决RESTful API中角色删除时遇到的问题,即如何正确地从前端接收JSON格式的角色ID参数,并提供了两种解决方案:一是通过@RequestBody接收并转换JSON字符串;二是前端改用form方式传递参数。
public CommonResult<Object> deleteRole(Integer roleid){
         System.out.println(roleid);
}
post方式,传参是json格式的话,上述方法打印是null;实际上前端已经传了,只是我们接收的方式不对。

解决方法一:使用注解@RequestBody,需要使用JSONObject 转换
  public CommonResult<Object> deleteRole(@RequestBody String roleid){
        JSONObject obj=new JSONObject(roleid);//将json字符串转为json对象
        String str= (String) obj.get("roleid");
        int result=roleService.delete(Integer.parseInt(str));
        return new CommonResult<>().retSucc(result);
    }

解决方法二:
前端传参不使用json,使用form

注意:当方法的参数是个对象时,只需要加注解@RequestBody就行,不需要用JSONObject 转换。


### 在 `HttpServletRequest` 中调试请求参数的方法 在调试 Java Web 应用程序时,查看 `HttpServletRequest` 中的请求参数是常见的调试需求。由于 `HttpServletRequest` 本身不提供直接访问内部参数存储的 API,调试时可以通过以下几种方式获取参数。 #### 1. 使用 `getParameter()` 和 `getParameterValues()` 在调试器中,可以手动调用 `getParameter(String name)` 方法来获取特定参数的。如果参数是多的(如复选框),可以使用 `getParameterValues(String name)` 获取字符串数组。 ```java String username = request.getParameter("username"); String[] hobbies = request.getParameterValues("hobbies"); ``` 在 IDE 的调试视图中,可以将鼠标悬停在变量上或在表达式视图中输入 `request.getParameter("username")` 来查看当前参数。 #### 2. 使用 `getParameterMap()` `getParameterMap()` 返回一个 `Map<String, String[]>`,可以用于遍历所有参数及其。该方法在调试时非常有用,因为它提供了所有参数的完整快照。 ```java Map<String, String[]> parameterMap = request.getParameterMap(); for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { System.out.println(entry.getKey() + ": " + Arrays.toString(entry.getValue())); } ``` 在调试器中可以直接查看 `parameterMap` 的内容,或者将其打印到控制台以确认参数是否正确解析。 #### 3. 查看原始请求数据 如果参数未被正确解析,可以检查原始请求内容: - **GET 请求**:参数通常在 URL 的查询字符串中,可以通过 `request.getQueryString()` 获取。 - **POST 请求**:如果内容类型是 `application/x-www-form-urlencoded`,可以通过读取 `request.getInputStream()` 或 `request.getReader()` 获取原始数据。 ```java BufferedReader reader = request.getReader(); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } ``` 这在调试参数未被正确解析或被篡改时非常有用。 #### 4. 使用日志输出参数 在开发环境中,可以临时添加日志输出所有参数,便于快速确认问题: ```java Enumeration<String> params = request.getParameterNames(); while (params.hasMoreElements()) { String paramName = params.nextElement(); System.out.println(paramName + " = " + request.getParameter(paramName)); } ``` #### 5. 使用 `HttpServletRequestWrapper` 自定义封装 在某些高级调试场景中,可以使用 `HttpServletRequestWrapper` 来封装请求对象,从而记录或修改参数,如用于参数过滤或日志记录: ```java public class DebugRequestWrapper extends HttpServletRequestWrapper { public DebugRequestWrapper(HttpServletRequest request) { super(request); } @Override public String getParameter(String name) { String value = super.getParameter(name); System.out.println("Parameter [" + name + "] = " + value); return value; } } ``` 在过滤器中使用该封装类可以实现对所有参数访问的监控。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值