Q:

How to return the JSON representation of an object through a RESTful spring application? 

I'm targeting Spring version 4.2.  So after reading some pages of the reference documentation, I developed this application. 
This application has only one method.  This method should be able to return a JSON representation of a very simple java object. ( After deploying the application, you can call the method through this URL: http://localhost:8080/srm/test)
Instead, I'm getting the following error. ( srm is the app's context root)
HTTP ERROR 500

Problem accessing /srm/test.  Reason:

    Circular view path [test]: would dispatch back to the current handler URL [/srm/test] again.  Check your ViewResolver setup! ( Hint: This may be the result of an unspecified view, due to default view name generation.) 
Caused by:

javax.servlet. ServletException: Circular view path [test]: would dispatch back to the current handler URL [/srm/test] again.  Check your ViewResolver setup! ( Hint: This may be the result of an unspecified view, due to default view name generation.) 
    at org.springframework.web.servlet.view. InternalResourceView.prepareForRendering(InternalResourceView.java:205)
    at org.springframework.web.servlet.view. InternalResourceView.renderMergedOutputModel(InternalResourceView.java:145)
    at org.springframework.web.servlet.view. AbstractView.render(AbstractView.java:303)
    at org.springframework.web.servlet. DispatcherServlet.render(DispatcherServlet.java:1243)
    at org.springframework.web.servlet. DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
    at org.springframework.web.servlet. DispatcherServlet.doDispatch(DispatcherServlet.java:971)
    at org.springframework.web.servlet. DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet. FrameworkServlet.processRequest(FrameworkServlet.java:969)
    at org.springframework.web.servlet. FrameworkServlet.doGet(FrameworkServlet.java:860)
    at javax.servlet.http. HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet. FrameworkServlet.service(FrameworkServlet.java:845)
    at javax.servlet.http. HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet. ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet. ServletHandler.handle(ServletHandler.java:401)
    at org.mortbay.jetty.security. SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet. SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler. ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp. WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.handler. HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty. Server.handle(Server.java:326)
    at org.mortbay.jetty. HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty. HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
    at org.mortbay.jetty. HttpParser.parseNext(HttpParser.java:549)
    at org.mortbay.jetty. HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty. HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio. SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread. QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

I searched and found that Spring assigns a default viewer for my controller's methods.  I'm not sure what a view is, but after searching, I kinda understood that the ContentNegotiatingViewResolver is the right one for me.  But after reading about it, I guessed that I had to specify a produces property for my method's @RequestMapping or specify an Accept header for the sent HTTP request from my browser to my application.  But none of that did the trick ! 
All what I'm trying to do here is to be able to return objects serialized as JSON objects from a RESTful application managed by Spring.  I would not like to use Spring Boot at the moment please. 
Here are my files. 
web.xml
<? xml version="1.0" encoding="UTF-8"? >

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>MyAPI</servlet-name>
        <servlet-class>org.springframework.web.servlet. DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyAPI</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

MyAPI-servlet.xml
<? xml version="1.0" encoding="UTF-8"? >
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.jarmy.lab.spring.rest" />
</beans>

The RESTful controller
package com.jarmy.lab.spring.rest;

import org.springframework.http. MediaType;
import org.springframework.web.bind.annotation. RequestMapping;
import org.springframework.web.bind.annotation. RestController;

@RestController
public class MyAPI {

    @RequestMapping(value = "/test", produces = MediaType. APPLICATION_JSON_UTF8_VALUE)
    public MyUser hello() {
        MyUser user = new MyUser();
        user.setName("Abbas");
        user.setId(12);
        return user;
    }
}

A sample DTO to be returned as a response (in JSON format)
package com.jarmy.lab.spring.rest;

public class MyUser {
    private String name;
    private long id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}

A:

First off, enable annotation based MVC by adding following code to your MyAPI-servlet.xml: 
<mvc:annotation-driven />

So, your MyAPI-servlet-xml would look like this:
<? xml version="1.0" encoding="UTF-8"? >
<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd 
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <mvc:annotation-driven/>
    <context:component-scan base-package="com.jarmy.lab.spring.rest"/>
</beans>

Then add the jackson-databind dependency:
<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.0</version>
</dependency>

Adding this will register a MappingJackson2HttpMessageConverter which converts to/from JSON.  Also, remove your current jackson mapper dependency.