springcloud开发踩坑

springcloud开发踩坑
 最后更新于 2024年10月02日 22:58:23

@RequestBody 接收数组、List 参数

@RequestBody 接收的是请求体里面的数据

注意:同一个方法中,@RequestBody@RequestParam() 可以同时使用。前者只能有一个,后者可以有多个。

import com.cncqs.commoncore.response.R;
import org.springframework.http.ResponseEntity;

/**
 * 接收单个 String 参数
 * 单个参数时使用 String 类型传输,比如 int、long、flout 等等,都使用 String
 * @param uid 前端传递参数格式:{"uid": "1"}
 */
@PostMapping("getById")
public ResponseEntity<Object> getById(@RequestBody String uid) {
  return R.ok().put("id", uid);
}

/**
 * 接收字符串数组,如果是整形数组,则换成Integer[] ids即可。
 * @param ids 前端传递参数格式:["1", "2", "3", "4"]
 */
@PostMapping("getByIds")
public ResponseEntity<Object> getByIds(@RequestBody String[] ids) {
    return R.ok().put("ids", Arrays.asList(ids));
}

/**
 * 接收 List<Map<String,Object> 参数
 * @param ids 前端传递参数格式:[{"name": "张三", "id": 1, "age": 12}]
 */
@PostMapping("getByIds")
public ResponseEntity<Object> getByIds(@RequestBody List<String> ids) {
    return R.ok().put("ids", ids);
}

/*********************** 使用POJO类接收参数 ***********************/
// 定义实体类
class User {
    private Integer uid;

    public Integer getId() {
        return uid;
    }

    public void setId(Integer id) {
        this.uid = id;
    }
}

/**
 * 接收单个POJO对象
  * @param user 前端传递的参数格式:{"id": 1, "name: "张三"}
 */
@PostMapping("saveUser")
public ResponseEntity<Object> saveUser(@RequestBody User user) {
    System.out.print(user.toString());
}

/**
 * 接收POJO List
 * @param userList 前端传递的参数格式:[{"id": 1, "name: "张三"}]
 */
@PostMapping("saveUserList")
public ResponseEntity<Object> saveUserList(@RequestBody List<User> userList) {
    for (User user : userList) {
        System.out.print(user);
    }
}

@RequestBody获取参数为空

代码如下。SpringBoot 解析器在解析 JSON 过程中因字段名驼峰命名无法匹配字段名导致,加上如下注解即可。

// 控制器
@ApiOperation("新增角色")
@PostMapping("addRole")
public R<SysRole> addRole(@RequestBody SysRole roleForm) {
   System.out.print(">>>>" + roleForm.getROLE_NAME()); // 控制输出 null
   sysRoleService.addRole(roleForm.getROLE_NAME());
   return R.ok();
}

// 实体类
+ import com.fasterxml.jackson.annotation.JsonProperty;

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_role")
public class SysRole implements Serializable {
    public String getROLE_NAME() {
        return ROLE_NAME;
    }

+   @JsonProperty(value = "ROLE_NAME")
    public void setROLE_NAME(String ROLE_NAME) {
        this.ROLE_NAME = ROLE_NAME;
    }
}

Parameter 'ids' not found. Available parameters are collection, list

  • 如果 DAO 层参数传递是 List,则在mabits中设置collection="list"
  • 如果 DAO 层参数传递是数组,则在mabits中设置collection="array"
// DAO层
public interface SysRoleMapper extends BaseMapper<SysRole> {
    /**
     * 删除多个角色
     * @param ids /
     */
    void deleteAll(List<Long> ids);
    void deleteAll(Integer[] ids); // 数组
}

// Mabits
<select id="deleteAllByIdIn">
  delete from sys_role where "INT_ID" in
  <foreach collection="list" open="(" close=")" separator="," item="id">
    #{id}
  </foreach>

// or
  <foreach collection="array" open="(" close=")" separator="," item="id">
    #{id}
  </foreach>
</select>