1. 程式人生 > 程式設計 >解決SpringBoot在後臺接收前臺傳遞物件方式的問題

解決SpringBoot在後臺接收前臺傳遞物件方式的問題

問題描述

前臺傳遞物件,不管是通過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)

解決SpringBoot在後臺接收前臺傳遞物件方式的問題

後臺用字串去接收為null

解決方案有以下幾種

1.使用實體接收(一個引數,感覺沒必要)

2.使用map接收(引數不清晰,不想用)

3.自定義註解(本文采用)

第一步:

解決SpringBoot在後臺接收前臺傳遞物件方式的問題

建立兩個類程式碼如下:

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);
}
}

第二步:啟動類新增如下程式碼

解決SpringBoot在後臺接收前臺傳遞物件方式的問題

第三步:後臺請求(使用下圖方式接受就可以了)

解決SpringBoot在後臺接收前臺傳遞物件方式的問題

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。