@RequestBody 가 json 대상 의 오 류 를 받 은 415 문 제 를 해결 합 니 다.

5458 단어 RequestBodyjson415
@RequestBody,json 수신 대상 오류 415
전단 요청:

$.ajax({
            url: basePath() + "/index/login.do",
            type : "post",
            data: JSON.stringify(form),
            dataType : "json",
            contentType : "application/json;charset=utf8",
            success: function (data) {
                console.log(data);
            },
            error: function () {
 
            }
        });
백 엔 드 수신:

@ResponseBody
 @RequestMapping(value = "/login",method = RequestMethod.POST,produces = "application/json;charset=utf8")
 public JSONObject login(@RequestBody LoginVo loginVo){
 
  JSONObject result = new JSONObject();
  UsernamePasswordToken token = new UsernamePasswordToken(loginVo.getUsername(),loginVo.getPassword());
  System.out.println(loginVo.isRememberMe());
  Subject subject = SecurityUtils.getSubject();
  subject.login(token);
  if (subject.isAuthenticated()){
   result.put("result",true);
  }else{
   result.put("result",false);
  }
  return result;
 }
전단 ajax 요청,백 엔 드@RequestBody 로 수신,415 요청 데이터 형식 오류 보고
오류 원인:
springMVC 는 ajax 가 설정 한 dataType 을 읽 지 못 하고 요청 헤드 를 대응 하 는 방식 으로 처리 하여 json 데 이 터 를 처리 할 수 없습니다.
해결 방법:
maven 에 Jackson 관련 jar 패 키 지 를 도입 하고 springMVC 의 xml 에 관련 설정 을 도입 합 니 다.Maven 과 springMVC 의 관련 코드 는 다음 과 같 습 니 다.
maven:

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.6</version>
        </dependency>
 
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.6</version>
        </dependency>
 
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.6</version>
        </dependency>
springMVC:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <!--           -->
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name = "supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
                <!-- json    -->
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>
백 엔 드 에서@RequestBody 를 사용 하여 전단 에서 전 달 된 데 이 터 를 받 습 니 다.
구덩이 밟 기 ①
@RequestBody 는 json 문자열 을 받 습 니 다.post 의 제출 방식 만 사용 할 수 있 습 니 다.
전단 에 비슷 한 기능 페이지 의 js 를 직접 복 사 했 습 니 다.이 페이지 는 get 제출 방식 을 사용 합 니 다.
그러나 전단 지 는 500 을 잘못 보고 하고 백 엔 드 는 힌트 를 잘못 알 렸 다.
2019-09-12 09:17:43.088 ERROR GlobalExceptionHandler : An exception occurs within the system : Required String parameter ‘xxx' is not present
② 구덩이 밟 기 ②
나중에.get(URL,data,callback)을.post(URL,data,callback)로 변경 합 니 다.
$.post(URL,data,callback);
필요 한 URL 매개 변 수 는 요청 한 URL 을 규정 합 니 다.
선택 한 data 매개 변 수 는 요청 한 데 이 터 를 규정 합 니 다.
선택 할 수 있 는 callback 인 자 는 요청 이 성공 한 후에 실 행 된 함수 이름 입 니 다.
그러나 전단 은 계속 500 을 잘못 보 고 했 고 백 엔 드 는 잘못된 힌트 를 보 냈 다.
2019-09-12 09:23:15.409 ERROR GlobalExceptionHandler : An exception occurs within the system : Content type ‘application/x-www-form-urlencoded;charset=UTF-8' not supported
③ 구덩이 밟 기 ③
백 엔 드 알림 은 Content type 을'application/x-www-form-urlencoded'로 지원 하지 않 습 니 다.charset=UTF-8'형식 입 니 다.바 이 두 는.post(URL,data,callback)를 찾 아 보 았 습 니 다.ajax 호출 단축 키 만 미리 설정 할 뿐 contentType 형식 을 수정 할 수 없습니다.
그래서$.post 방법 을&.ajax 방법 으로 수정 합 니 다.
설치 하 다.

type: “post”,
url: ctx + url,
data: JSON.stringify(allData),
dataType: “json”,
contentType:“application/json;charset=utf-8”,
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기