前端與后端之間參數的傳遞與接收和@RequestBody,@Requestparam,@Param三個注解的使用


參數在前台通過對象的形式傳遞到后台,在后台,可以用@RequestBody注解通過Map或JSONObject接收(太麻煩,既要從Map中取值,取完值后又要封裝到Map),也可以用@RequestParam注解通過具體的屬性接收。在dao層可以通過Map將參數傳遞到mapper.xml,也可以用@Param注解將具體的屬性值傳遞到Mapper.xml。

@RequestParam語法:

語法:@RequestParam(value=”參數名”,required=”true/false”,defaultValue=””)

1、value:參數名,

2、required:是否包含該參數,默認為true,表示該請求路徑中必須包含該參數,如果不包含就報錯。

示例:如果像下面這樣寫,當你清空(點擊X號)省市區划時,會觸發change事件,

<el-select v-model="listQuery.provinceCode" style="width: 160px;" placeholder="請選擇省" @change="provinceChange" filterable clearable>
            <el-option v-for="item in provinceList" :key="item.id" :label="item.chiShortName"
                       :value="item.id" />
          </el-select>

provinceChange方法:

//根據省查詢市
    provinceChange(value) {
      console.log(value)
      if (this.listQuery.cityCode != undefined) {
        this.listQuery.cityCode = '';
      };
      if (this.listQuery.areaCode != undefined) {
        this.listQuery.areaCode = '';
      };
      const query = { 'pid': value }
      area.selectCityByPid(query).then(response => {
        console.log(response)
        this.cityList = response.data;
      });
    },

由於pid值為空,故會報錯。

@RequestMapping("/selectCity")
    public Result findAreasByPCity(@RequestParam(name = "pid") String pid) {
        return areaCodeService.findCityByPid(pid);
    }

故修改如下:

@RequestMapping("/selectCity")
    public Result findAreasByPCity(@RequestParam(name = "pid", required = false) String pid) {
        return areaCodeService.findCityByPid(pid);
    }

3、defaultValue:默認參數值,如果設置了該值,required=true將失效,自動為false,如果沒有傳該參數,就使用默認值

 @RequestParam(name = "page", defaultValue = "1") int pageIndex,

前端代碼:

前端傳遞給后台一個對象。

data() {
    return { listQuery: { page: 1, limit: 20, dataCode: null, dataName: null, // enterpriseId: null, enterpriseType: null }, },
getList() {
      this.listLoading = true
      dataSet.getList(this.listQuery).then(response => {
        if (response.success) {
          this.list = response.data
          this.total = response.total
        } else {
          this.$message.error("數據集合信息獲取失敗")
        }
      }).catch(error => {
        console.log(error)
        this.$message.error("發生內部錯誤,請聯系管理員")
      }).finally(() => {
        this.listLoading = false
      })
    },
getList(query) {
    return request({
      url: '/dataSet/list',
      method: 'post',
      params: query
    })
  },

后台代碼:

controller:

controller用@RequestParam注解接收單個屬性

@RestController
@RequestMapping("api/dataSet")
@Validated
public class DataSetController {
    private static Logger logger = LoggerFactory.getLogger(DataSetController.class);

    @Autowired
    private DataSetService dataSetService;
    @PostMapping("/list")
    public Result getDataSetList(
            @RequestParam(required = false) String dataCode,
            @RequestParam(required = false) String dataName,
            @RequestParam(name = "page", defaultValue = "1") int pageIndex,
            @RequestParam(name = "limit", defaultValue = "10") int length
    ) {
        return dataSetService.getDataSetList(dataCode, dataName, pageIndex, length);
    }
}

也可以用Map或JSONObject接收前端傳遞過來的整個對象

@RestController
@RequestMapping(
"api/dataSet") @Validated public class DataSetController { private static Logger logger = LoggerFactory.getLogger(DataSetController.class); @Autowired private DataSetService dataSetService; @PostMapping("/list") public Result getDataSetList(@RequestBody Map map ) {
      String dataCode = (String) map.get("dataCode");
      String dataName = (String) map.get("dataName");
      Integer pageIndex = (Integer) map.get("pageIndex");
      Integer length = (Integer) map.get("length");
      return dataSetService.getDataSetList(dataCode, dataName, pageIndex, length); } }
@RestController
@RequestMapping("api/dataSet")
@Validated
public class DataSetController {
    private static Logger logger = LoggerFactory.getLogger(DataSetController.class);

    @Autowired
    private DataSetService dataSetService;
    @PostMapping("/list")
    public Result getDataSetList(@RequestBody JSONObject map ) {
      String dataCode = map.getString("dataCode");
      String dataName = map.getString("dataName");
      Integer pageIndex = map.getIntValue("pageIndex");
      Integer length = map.getIntValue("length");
      return dataSetService.getDataSetList(dataCode, dataName, pageIndex, length); } }

service:

service中可以將參數封裝到Map中再傳遞到dao層,即使是controller層用Map接收,service層中也要從Map中取值。

public Result getDataSetList(String dataCode, String dataName, int pageIndex, int length) {
Map map = new HashMap();
map.put("dataCode", dataCode);
map.put("dataName", dataName);
PageHelper.startPage(pageIndex, length);
List<Map> dataSetList = dataSetMapper.selectDataSetList(map);
PageInfo pageInfo = new PageInfo(dataSetList);
return Result.operating("數據集合查詢成功", true, Result.SUCCESS, pageInfo.getList(), (int) pageInfo.getTotal(), pageInfo.getPages());
}

service中也可以直接將參數分別傳遞到dao層

public Result getDataSetList(String dataCode, String dataName, int pageIndex, int length) {
    PageHelper.startPage(pageIndex, length);
    List<Map> dataSetList = dataSetMapper.selectDataSetList(dataCode,dataName);
    PageInfo pageInfo = new PageInfo(dataSetList);
    return Result.operating("數據集合查詢成功", true, Result.SUCCESS, pageInfo.getList(), (int) pageInfo.getTotal(), pageInfo.getPages());
}

dao層:

如果service中將參數封裝到Map中再傳遞到dao層,則dao層用Map

public interface DataSetMapper extends Mapper<DataSet> {
    List<Map> selectDataSetList(Map map);
}

如果service中直接將參數分別傳遞到dao層,則用@Param注解接收

public interface DataSetMapper extends Mapper<DataSet> {
    List<Map> selectDataSetList(@Param("dataCode") String dataCode,@Param("dataName") String dataName); }

mapper.xml:

<select id="selectDataSetList" resultType="java.util.Map">
SELECT
t1.id AS "dataId",
t1.data_code AS "dataCode",
t1.data_name AS "dataName",
t1.remark AS "remark",
t2.id AS "enterpriseDataSetId",
t3.id AS "enterpriseId",
t3.enterprise_name AS "enterpriseName"
FROM
sys_data_set t1
LEFT JOIN sys_enterprise_data_set t2 ON t1.id = t2.data_id
LEFT JOIN sys_enterprise t3 ON t2.enterprise_id = t3.id
WHERE 1=1 AND t1.status=0
<if test="dataCode!=null and dataCode!=''">
AND t1.data_code LIKE '%'||#{dataCode}||'%'
</if>
<if test="dataName!=null and dataName!=''">
AND t1.data_name LIKE '%'||#{dataName}||'%'
</if>
<if test="enterpriseId!=null and enterpriseId!=''">
AND t3.del_flag = 0
AND t3.id=#{enterpriseId}
</if>
ORDER BY t1.id DESC
</select>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM