Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

404 not found error in jQuery AJAX call to Spring controller

I am newbie in Spring. I generate the JSON like below:

[
    {
        "customer" : "16", "project" : "19",
        "phase" : "47", "approver" : "5",
        "date1" : "", "date2" : "",
        "date3" : "", "date4" : "",
        "date5" : "", "date6" : "",
        "date7" : "", "activity" : "1"
    },

    {
        "customer" : "17", "project" : "20",
        "phase" : "48", "approver" : "3",
        "date1" : "", "date2" : "",
        "date3" : "", "date4" : "",
        "date5" : "", "date6" : "",
        "date7" : "", "activity" : "1"
    }
]

I am passed this JSON to my Spring controller:

$.ajax({
    type: 'post',
    url: 'NewTimesheet',
    dataType : 'json',
    data: JSON.stringify(jsonObj),

    success: function(data) {
        console.log(data);
    }
});

I am mapped the request to controller like below:

@RequestMapping(value="NewTimesheet", headers = { "Content-type=application/json" })
@ResponseBody
public String addNewTimesheet(@RequestBody List<Timesheet> timesheet,
    HttpSession session) {

    logger.info("timesheet list size is" + timesheet.size());
    return "success";
}

Timesheet class:

public class Timesheet {
    private String project;
    private String phase;
    private String approver;
    private String customer;
    private String date1;
    private String date2;
    private String date3;
    private String date4;
    private String date5;
    private String date6;
    private String date7;
    private String activity;

    //Getters and setters
}

But my request is not mapped with the conroller. My console displays like below:

WARN org.springframework.web.servlet.PageNotFound.handleNoSuchRequestHandlingMethod:142 - No matching handler method found for servlet request: path '/NewTimesheet', method 'POST', parameters map['[{"customer":"16","project":"19","phase":"47","approver":"5","date1":"","date2":"","date3":"","date4":"","date5":"","date6":"","date7":"","activity":"1"},{"customer":"17","project":"20","phase":"48","approver":"3","date1":"","date2":"","date3":"","date4":"","date5":"","date6":"","date7":"","activity":"1"}]' -> array['']]

How to map my JSON to controller? Any help will be greatly appreciated!!!

like image 629
Madhesh Avatar asked Nov 05 '14 11:11

Madhesh


3 Answers

You need to annotate the class as Controller, add a RequestMapping in your class and the HTTP method your calling in your method.

@Controller
@RequestMapping("/NewTimesheet")
public class MyClassName {

        @RequestMapping(value={ "", "/" }, method = RequestMethod.POST, headers = { "Content-type=application/json" })
        @ResponseBody
        public String addNewTimesheet(@RequestBody List<Timesheet> timesheet,HttpSession session){
                 logger.info("timesheet list size is"+timesheet.size());
                 return "success";
        }
}
like image 143
June Avatar answered Nov 02 '22 19:11

June


Change @RequestBody to @ModelAttribute before the list in the controller. And in your json, put 'timesheet.' before every field, that is, timesheet.customer,timesheet.project.... such like that. That would work.

like image 41
CE ZHANG Avatar answered Nov 02 '22 17:11

CE ZHANG


You need to define method=post. also I added produces = "application/json"

@RequestMapping(value="NewTimesheet", method = RequestMethod.POST, produces = "application/json")
        @ResponseBody
        public String addNewTimesheet(@RequestBody List<Timesheet> timesheet,HttpSession session){
                 logger.info("timesheet list size is"+timesheet.size());
                 return "success";
        }
like image 23
pms Avatar answered Nov 02 '22 18:11

pms