user4892346
user4892346

Reputation:

Ajax call with Spring MVC Controller

I was trying to send an AJAX call to my controller, the code of which is displayed below. Now the problem that I am facing is that even though I am able to retrieve the data in the controller and subsequently process it, it is not returned to the jsp page with the AJAX call.

@SuppressWarnings("unchecked")
@RequestMapping(value="/movie", method=RequestMethod.GET)
public @ResponseBody Person search(HttpServletRequest request, HttpServletResponse response) throws IOException{        
    String name = request.getParameter("uname1");
    System.out.println(name);
    List<Person> movie = personDAO.search(name);
    Person per = new Person();
    for (java.util.Iterator<Person> iterator = movie.iterator(); iterator.hasNext();){
        per = iterator.next(); 
    }

    System.out.print(per + " Wtf");
    return per;
}

This is my AJAX call:

     $.ajax({
        url: 'movie.html',
        dataType: "json",
        type: "GET",
        contentType: 'application/json',
        mimeType: 'application/json',
        data: 'uname1=' + $('#element0').val(),
        success: function(data){
               $('#col1').text(data.name);
               $('#col2').text(data.pname);
               $('#col3').text(data.wname);
               $('#col4').text(data.lname);
        },
        error: function(xhr, status, error) {
               $('#col1').text("Undefined");
               $('#col2').text("Undefined");
               $('#col3').text("Undefined");
               $('#col4').text("Undefined");
        }
    });

Attached below is a screen shot of the output: Eclipse Output

Upvotes: 0

Views: 8137

Answers (2)

user4892346
user4892346

Reputation:

So, the problem was with my url mapping. Before my question was edited, my code had some commented sections that were parsing the Person object and inserting its elements into to a JSON object. The problem was that the URL I was utilizing for my AJAX call had a .html extension and Spring actually uses the extension in the URL to decide what type of content to return, as mentioned in:

@ResponseBody not working with spring 4.2.4 - not a duplicate I have checked all others

So by ammending the URL pattern in my web.xml like this:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.html</url-pattern>
    <url-pattern>*.json</url-pattern>
</servlet-mapping>

And subsequently changing the url in my AJAX call to movie.JSON:

     $.ajax({
        url: 'movie.json',
        dataType: "json",
        type: "GET",
        contentType: 'application/json',
        mimeType: 'application/json',
        data: 'uname1=' + $('#element0').val(),
        success: function(data){
               $('#col1').text(data.name);
               $('#col2').text(data.pname);
               $('#col3').text(data.wname);
               $('#col4').text(data.lname);
        },
        error: function() {
               $('#col1').text("Undefined");
               $('#col2').text("Undefined");
               $('#col3').text("Undefined");
               $('#col4').text("Undefined");
        }
    });

I was able to achieve the desired result.

Upvotes: 1

Sohil
Sohil

Reputation: 562

Instead of returning a Object. You should return a string with a ',' separator and split it to get the desired output in the view.

According to mozilla documentation, The ResponseText can be string or xml. You are passing a object which can be an issue.

Here's a link to get the comma separated String and use it in the view

Upvotes: 1

Related Questions