madhuram2468
madhuram2468

Reputation: 41

Spring not accepting embedded json

I am stuck with a JSON and need assistance for the same.

I've a JSON like below which I'm getting from client. i'm using Chrome rest client to pass parameters.The content-type is "application/json"

My controller and bean classes are below. When I am making a post call I'm getting 400 bad request error.Please let me what is wrong? Is there any other way to implement apart from using so many bean classes?

{
    "addSurveyRequest": {
        "data": {
            "suveyName": "abcde",
            "surveyDesc": "pqrst",
            "surveyFromDate": "MM-DD-YYYY",
            "surveyToDate": "MM-DD-YYYY",
            "surveyOptions": [
                {
                    "surveyOptionName": "abc",
                    "surveyOptionDesc": "qwerty"
                },
                {
                    "surveyOptionName": "pqr",
                    "surveyOptionDesc": "asdfg"
                }
            ]
        }
    }
}

I've my controller like

@RequestMapping(value = "/add", method = RequestMethod.POST, consumes="application/json", produces="application/json")
public @ResponseBody String addSurvey(@RequestBody AddSurveyRequest addSurveyRequest) throws Exception
{
    String surveyId=null;
    logger.debug("surveyName"+addSurveyRequest.getDataDTO().getSurveyDTO().getSurveyName()+"surveyDesc "+addSurveyRequest.getDataDTO().getSurveyDTO().getSurveyDesc()+"fromdate"+addSurveyRequest.getDataDTO().getSurveyDTO().getSurveyFromDate());
}

I've my bean class like below.

public class AddSurveyRequest{
    private DataDTO data;
    //setteres and getters
}

public class DataDTO{
    private SurveyDTO surveyDTO;
    //setteres and getters
}

public class SurveyDTO {
    private int surveyId;
    private String surveyName;
    private String surveyDesc;  
    private Date surveyFromDate;
    private Date surveyToDate;
    private List<SurveyOptionDTO> surveyOptions;
    //setteres and getters
}

public class SurveyOptionDTO {
    private String surveyOptionName;
    private String surveyOptionDesc;
    //setteres and getters
}

Any help greatly appreciated. Thanks in advance!

Upvotes: 0

Views: 119

Answers (2)

madhuram2468
madhuram2468

Reputation: 41

I made the variable name's in my Java class same as JSON parameter name and it worked out for me. I got this answer from another link, missed the link.

Below are the changes I made and it worked!

public class AddSurveyRequest{ private DataDTO addSurveyRequest; //setteres and getters }

public class DataDTO{ private SurveyDTO data; //setteres and getters }

Upvotes: 0

Arne Burmeister
Arne Burmeister

Reputation: 20604

I would say you should change the JSON input removing the outer addSurveyRequest as you declared the AddSurveyRequest type as parameter:

{
    "data": {
        "suveyName": "abcde",
        "surveyDesc": "pqrst",
        "surveyFromDate": "MM-DD-YYYY",
        "surveyToDate": "MM-DD-YYYY",
        "surveyOptions": [
            {
                "surveyOptionName": "abc",
                "surveyOptionDesc": "qwerty"
            },
            {
                "surveyOptionName": "pqr",
                "surveyOptionDesc": "asdfg"
            }
        ]
    }
}

Upvotes: 1

Related Questions