복붙노트

[SPRING] Spring MVC에서 Required String 매개 변수가 존재하지 않습니다.

SPRING

Spring MVC에서 Required String 매개 변수가 존재하지 않습니다.

나는 봄 MVC 내 컨트롤러에 AJAX 쿼리를 만들려고합니다.

내 행동 코드는 다음과 같습니다.

@RequestMapping(value = "events/add", method = RequestMethod.POST)
public void addEvent(@RequestParam(value = "start_date") String start_date, @RequestParam(value = "end_date") String end_date, @RequestParam(value = "text") String text, @RequestParam(value = "userId") String userId){
    //some code    
}

내 Ajax 쿼리는 다음과 같습니다.

$.ajax({
        type: "POST",
        url:url,
        contentType: "application/json",
        data:     {
                start_date:   scheduler.getEvent(id).start_date,
                end_date:  scheduler.getEvent(id).end_date,
                text: scheduler.getEvent(id).text,
                userId: userId
        },
        success:function(result){
         //here some code
        }
    });

하지만 오류가 발생했습니다.

왜? 내가 알기로 나는 그것을 (@RequestParam (value = "start_date")와 같이 표현했다. String start_date

UDP 이제 404를 주겠다. 데이터를 가져올 내 수업

public class EventData {
    public String end_date;
    public String start_date;
    public String text;
    public String userId;
    //Getters and setters
}

내 js AJAX 호출은 다음과 같습니다.

$.ajax({
    type: "POST",
    url:url,
    contentType: "application/json",
    // data: eventData,
    processData: false,
    data:    JSON.stringify({
        "start_date":   scheduler.getEventStartDate(id),
        "end_date":  scheduler.getEventEndDate(id),
        "text": scheduler.getEventText(id),
        "userId": "1"
    }),

컨트롤러 동작 :

@RequestMapping(value = "events/add", method = RequestMethod.POST)
public void addEvent(@RequestBody EventData eventData){    
}

JSON 데이터는 다음과 같습니다.

end_date: "2013-10-03T20:05:00.000Z"
start_date: "2013-10-03T20:00:00.000Z"
text: "gfsgsdgs"
userId: "1"

해결법

  1. ==============================

    1.서버 측에서는 요청 문자열을 쿼리 문자열로 기대하지만 클라이언트 측에서는 json 객체를 보냅니다. json을 바인딩하려면 모든 매개 변수를 포함하는 단일 클래스를 만들고 @RequestParam 대신 @RequestBody 주석을 사용해야합니다.

    서버 측에서는 요청 문자열을 쿼리 문자열로 기대하지만 클라이언트 측에서는 json 객체를 보냅니다. json을 바인딩하려면 모든 매개 변수를 포함하는 단일 클래스를 만들고 @RequestParam 대신 @RequestBody 주석을 사용해야합니다.

    @RequestMapping(value = "events/add", method = RequestMethod.POST)
    public void addEvent(@RequestBody CommandBean commandBean){
        //some code
    }
    

    여기에 더 자세한 설명이 있습니다.

  2. ==============================

    2.나는 같은 문제가 .. 게시물 요청에 config 매개 변수를 지정하여 해결 :

    나는 같은 문제가 .. 게시물 요청에 config 매개 변수를 지정하여 해결 :

    var config = {
        transformRequest : angular.identity,
        headers: { "Content-Type": undefined }
    }
    
    $http.post('/getAllData', inputData, *config*).success(function(data,status) {
        $scope.loader.loading = false;
    })
    

    config가 내가 포함 된 매개 변수 였고 작동하기 시작했습니다. 희망이 도움이 :)

  3. from https://stackoverflow.com/questions/19619088/required-string-parameter-is-not-present-error-in-spring-mvc by cc-by-sa and MIT license