springboot 에서 post 요청 매개 변 수 를 가 져 올 수 없 는 해결 방법

5744 단어 springboot획득post
문제 설명
최근 에 위 챗 애플 릿 을 만 들 고 있 습 니 다.spring boot 로 백 엔 드 를 만 들 었 는데 클 라 이언 트 가 post 요청 을 보 낼 때 서버 에서 인 자 를 받 지 못 하 는 것 을 발 견 했 습 니 다.문 제 를 간소화 한 후 다음 과 같다.
위 챗 애플 릿:
페이지 에 단 추 를 놓 고 테스트 를 진행 합 니 다.

<!--index.wxml-->
<view class="container">
 <button catchtap='testpost'>      </button>
</view>
함수 바 인 딩 post 요청 보 내기

//index.js
//      
const app = getApp()

Page({
 testpost:function(){
  wx.request({
   url: 'http://127.0.0.1:8081/testpost/demo',
   method:'POST',
   data:{
    name:'lijing',
    age:'18'
   },
   success:function(res){
    console.log(res);
   },
   fail:function(err){
    console.log(err)
   }
  })
 }
})
그림 에서 보 듯 이:

서버
서버 에 springBoot 항목 을 새로 만 들 고 포트 와 경 로 를 설정 합 니 다.

server.port=8081
server.servlet.context-path=/testpost
테스트 에 사용 할 controller 를 새로 만 듭 니 다:

package com.demo.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 1. @author lijing
 2. @date 2019-03-31-20:19
 3. @discroption   post      
 */
@RestController
public class TestController {
  @RequestMapping(value = "/demo",method = RequestMethod.POST)
  public String demo(String name,String age){
    System.out.println("name = [" + name + "], age = [" + age + "]");
    return "server response";
  }
}
인 자 를 얻 을 수 있 으 면 콘 솔 에서 인 자 를 인쇄 하 는 것 을 알 수 있 습 니 다.
그러나 애플 릿 인터페이스 에서 단 추 를 누 르 면 서버 에서 데 이 터 를 얻 을 수 없습니다.다음 과 같 습 니 다.

해결 방법
자 료 를 찾 아 본 결과 post 요청 데 이 터 는 네 가지 흔 한 방식 이 있 습 니 다.
application/x-www-form-urlencoded
브 라 우 저의 네 이 티 브
폼 입 니 다.ajax 도 이러한 방식 으로 제출 한 multipart/form-data 입 니 다.
폼 업로드 파일 에 사용 되 는 이러한 제출 방식 application/json
이러한 제출 방식 의 메시지 주 체 는 json 문자열 text/xml 입 니 다.
메시지 주 체 는 XML 형식의 내용 입 니 다.
애플 리 케 이 션 으로 돌아 가 메시지 헤드 를 확인 한 결과 제출 방식 은:application/json 입 니 다.

따라서 서버 에서 수신 할 때 직접 매개 변수 로 받 아들 일 수 없고 스 트림 형식 으로 json 문자열 을 읽 을 수 있 으 며 도구 류 로 json 데 이 터 를 분석 할 수 있 습 니 다.다음 과 같 습 니 다.

package com.demo.demo;

import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author lijing
 * @date 2019-03-31-20:19
 * @discroption   post      
 */
@RestController
public class TestController {
  @RequestMapping(value = "/demo",method = RequestMethod.POST)
  public String demo(HttpServletRequest req){
    try {
      BufferedReader br = new BufferedReader(new InputStreamReader(req.getInputStream()));
      StringBuffer sb=new StringBuffer();
      String s=null;
      while((s=br.readLine())!=null){
        sb.append(s);
      }
      JSONObject jsonObject = JSONObject.parseObject(sb.toString());
      String name = jsonObject.getString("name");
      String age = jsonObject.getString("age");
      System.out.println("name:"+name+" age:"+age);
    } catch (IOException e) {
      e.printStackTrace();
    }
    return "server response";
  }
}
출력 은 다음 과 같 습 니 다:

위 에서 사용 한 json 분석 도구 클래스:

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.28</version>
</dependency>
@RequestBody 주석 사용 하기
@RequestBody 는 형태 참조 목록 에 작용 하여 프론트 데스크 에서 고정된 형식의 데 이 터 를 보 내 는 데 사 용 됩 니 다.[xml 형식 이나 json 등]대응 하 는 자바 빈 대상 으로 봉 합 니 다.그래서 위의 코드 는 다음 과 같은 형식 으로 바 꿀 수 있 습 니 다.

package com.demo.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
1. @author lijing
2. @date 2019-03-31-20:19
3. @discroption   post      
*/
@RestController
public class TestController {
  @RequestMapping(value = "/demo",method = RequestMethod.POST)
  public String demo(@RequestBody Person person){
    System.out.println(person);
    return "server response";
  }
}

package com.demo.model;
import lombok.*;

@Data
class Person{
	private String name;
	private String age;
}
springboot 에서 post 요청 파 라 메 터 를 가 져 올 수 없 는 해결 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 springboot 에서 post 내용 을 가 져 올 수 없 으 니 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기