우체부 API 인터페이스 테스트 도구를 사용하는 경우, 어떻게 사용하는 json
사용하는 대신, 그것의 값으로 문자열을 x-www-form-urlencoded
함으로써, 결국, 유형을 key-value
전통적 가치는 한계가있다. 내가 테스트하려는 경우 데이터가 삽입 대량 그것에 인터페이스 사용 x-www-form-urlencoded
방법을 간단하게이 시나리오에서 적용되지 않습니다.
그래서, 여기에 스프링의 두 음 밖으로 발생 않습니다 우체부 도구에 의한 값으로 JSON 문자열을 사용하는 방법은 다음과 같습니다
-
@RequestParam
-
@RequestBody
모두 모두,이 두 가지 매개 변수는 백그라운드에서 메모를받을 수 있지만 같은 사용 시나리오 수 있습니다.
二, @ RequestParam
먼저 @RequestParam 사용 시나리오를 소개합니다 :
주석 @RequestParam 파라미터 수신 에 RequestHeader에서 , 즉, 요청 헤더 . 일반적으로 사용 요청 GET : 같은 일반적인 URL로, HTTP를 : // localhost를 : 8081 / 부팅 스프링 스터디 / 소설 / findByAuthorAndType 저자 = 당나라 세 개의 작은 및 유형 =있는, 종료 Controller
도 다음 층이 작성 :
@RequestParam 세 가지 구성 매개 변수가 있습니다 :
-
required
기본적으로 표시 여부를해야합니다true
, 당신은해야합니다. -
defaultValue
기본 매개 변수는 요청에 제공 될 수있다. -
value
파라미터 (키 값에 대응)를 수신하도록 URL 이름.
콘텐츠를 콘텐츠 형식을 처리하는 @RequestParam은 application / x-www-form-urlencode되고 인코딩이 부동산에 대한 컨텐츠 유형 기본값입니다.
@RequestParam 프로세스가 사용되기 때문에 Content-Type
으로 application/x-www-form-urlencoded
인코딩 콘텐츠 우편 배달 있도록 체형 선택하는 x-www-form-urlencoded
자동 헤더가되도록,진다 Content-Type
: application/x-www-form-urlencoded
포맷을 인코딩하는 단계를 포함한다. 아래 그림과 같이 :
그러나 이것은 당신이 사용하는 경우 아, 데이터 삽입 지원 대량하지 않는 json
값을 전달하는 문자열을, 유형이 설정은 application/json
보내기를 클릭 한 다음, 배경 값을받을 수 없습니다 불평 것입니다 null
.
이 때, 메모 @RequestBody 유용합니다. 아래로보고 계속 ↓
세 @ RequestBody
먼저 @RequestBody 사용 시나리오를 소개합니다 :
주석 @RequestBody 파라미터 수신 requestBody에서 , 즉, 요청 체 . 일반적으로 비 처리 Content-Type: application/x-www-form-urlencoded
: 다음과 같은 형식으로 부호화 데이터 application/json
, application/xml
그리고 다른 유형의 데이터.
온 application/json
데이터의 유형, 당신은 백 엔드에 모든 JSON 데이터 내에서 백 엔드 주석 @RequestBody 바디를 사용하고 분석 할 수 있습니다.
테이블에 데이터를 삽입 3.1 벌크
예를 들어, 데이터의 배치가 삽입되면, 컨트롤러 표현 층 아래에 도시된다 :
@RequestBody에 사용될 수있는 프로세스 이후 Content-Type
인 application/json
암호화 콘텐츠, 우편 배달 있도록 체형이 선택 row
-> JSON(application/json)
, 그래서 Headers
자동으로된다 Content-Type
: application/json
인코딩 형식. 아래와 같이 본문 데이터 :
批量向表中插入两条数据,这里的 saveBatchNovel()
方法已经封装了 JPA
的 saveAll()
方法。body
里面的 json
语句的 key
值要与后端实体类的属性一一对应。
注意:前端使用$.ajax的话,一定要指定 contentType: "application/json;charset=utf-8;"
,默认为 application/x-www-form-urlencoded
。
3.2 后端解析json数据
上述示例是传递到实体类中的具体写法,那么如果传递到非实体类中,body里面的json数据需要怎么解析呢?我们再来看下面这个例子:
在body中,我们还是输入上面的json数据,根据分析,上面的json数据是一个List数组内嵌套着map对象,那么在后台的接收形式可写为 List<Map<String, String>>
,具体代码如下图所示:
postman请求:
控制台输出:
得出结论,通过@RequestBody可以解析Body中json格式的数据。
四、总结
注解@RequestParam接收的参数是来自requestHeader中,即请求头。通常用于GET请求,像POST、DELETE等其它类型的请求也可以使用。
注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded
编码格式的数据,比如:application/json
、application/xml
等类型的数据。通常用于接收POST、DELETE等类型的请求数据,GET类型也可以适用。
@requestParam实例: 访问方式可为form表单 一般为get
public AjaxResult getCouponCode( @RequestParam(name = "userId", required = false, defaultValue = "-1") long userId)
当接口请求是application/JSON时,直接发Json.toJSONString(对象)
public RebateRuleDTO queryRebateRule(GetRebateRule rebateRule) { return getObject(URLRebateConstant.URL_QUERY_REBATE_RULE, JSON.toJSONString(rebateRule), RebateRuleDTO.class, "queryRebateRule");