解決SpringBoot在後臺接收前臺傳遞物件方式的問題
阿新 • • 發佈:2021-01-21
問題描述
前臺傳遞物件,不管是通過ajax請求方式,還是axios請求方式。後臺應該怎麼接收物件處理呢?
比如前臺傳遞
ajax方式:
$.ajax({ url: "後臺的方式",async: false,type: "POST",dataType : "json",data: JSON.stringify(formParamObj),contentType:'application/json;charset=utf-8',success: function (data) { if (data.isSuccess) { //成功處理方式 } else if ("403" == data) { //失敗方式處理 } } });
axios方式:
let params = { key1:value1,key2:value2 } axios.post/get(url,params).then(res=>{ //處理結果 })
解決方案:
在方法的引數前面添加註解@RequestBody就可以解決
@PostMapper("/xxx/xxxx") public List getProgramList(@RequestBody Program program){ System.out.println(program); return null; }
落地測試:
可以通過postman工具進行測試
補充:關於SpringBoot自定義註解(解決post接收String引數 null(前臺傳遞json格式))
今天遇到個問題,介面方面的,請求引數如下圖為json格式(測試工具使用google的外掛postman)
後臺用字串去接收為null
解決方案有以下幾種
1.使用實體接收(一個引數,感覺沒必要)
2.使用map接收(引數不清晰,不想用)
3.自定義註解(本文采用)
第一步:
建立兩個類程式碼如下:
package com.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestJson { String value(); }
package com.annotation; import java.io.BufferedReader; import javax.servlet.http.HttpServletRequest; import org.springframework.core.MethodParameter; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; import com.alibaba.fastjson.JSONObject; public class RequestJsonHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(RequestJson.class); } @Override public Object resolveArgument(MethodParameter parameter,ModelAndViewContainer mavContainer,NativeWebRequest webRequest,WebDataBinderFactory binderFactory) throws Exception { RequestJson requestJson = parameter.getParameterAnnotation(RequestJson.class); HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); BufferedReader reader = request.getReader(); StringBuilder sb = new StringBuilder(); char[] buf = new char[1024]; int rd; while ((rd = reader.read(buf)) != -1) { sb.append(buf,rd); } JSONObject jsonObject = JSONObject.parseObject(sb.toString()); String value = requestJson.value(); return jsonObject.get(value); } }
第二步:啟動類新增如下程式碼
第三步:後臺請求(使用下圖方式接受就可以了)
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。