当前位置: 代码迷 >> 综合 >> springboot get请求传递json对象(含值为对象的属性),映射到后台Controller参数实体的 Map 类型字段
  详细解决方案

springboot get请求传递json对象(含值为对象的属性),映射到后台Controller参数实体的 Map 类型字段

热度:50   发布时间:2024-02-02 04:38:05.0

假设后台 controller 的参数是一个 User 类型的变量,User 的定义如下:

public class User {String name;Map<string, Object> params;
}

前台的 json 要使用以下写法:

{name: '22','params[age]': '21','params[weight]': 60
}

如果后台报错说请求链接包含非法字符,则用 encodeURIComponent 编码,或者直接手动写死也行,'[' 是 '%5B', ']' 是 '%5D'。

如果前端使用的是 Vue,那么可以在 request 拦截器里统一处理。既然要处理,那么前端就改用一种更符合直觉的方式:

{name: '22',params: {age: '21',weight: 60}
}

然后在 request 拦截器里做转换和编码:

service.interceptors.request.use(config => {const isToken = (config.headers || {}).isToken === falseif (getToken() && !isToken) {config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改}let url = config.url;if (config.method === 'get' && config.params) {url += '?';let keys = Object.keys(config.params);for (const key of keys) {const value = config.params[key];if (typeof value === 'object') {for (const key2 of Object.keys(value)) {let key3 = key + '[' + key2 + ']';url += `${encodeURIComponent(key3)}=${value[key2] == undefined ? '' : encodeURIComponent(value[key2])}&`;}} else {url += `${encodeURIComponent(key)}=${config.params[key] == undefined ? '' : encodeURIComponent(config.params[key])}&`;}}url = url.substring(0, url.length - 1);config.params = {};}config.url = url;return config
}, error => {console.log(error)Promise.reject(error)
})