title: "Circular view path" in a simple Spring Boot project with a Controller
body: <p>I have a simple Spring Boot project with this Gradle build file:</p>
  
  <pre><code>apply plugin: 'java'
  apply plugin: 'eclipse'
  apply plugin: 'spring-boot'
  apply plugin: 'war'
  
  sourceCompatibility = 1.7
  targetCompatibility = 1.7
  
  version = '1.0'
  
  buildscript {
      ext {
          springBootVersion = '1.1.9.RELEASE'
      }
      repositories {
          maven { url "http://repo.spring.io/libs-snapshot" }
          mavenLocal()
      }
      dependencies {
          classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.9.RELEASE")
      }
  }
  
  jar {
      manifest {
          attributes 'Implementation-Title': 'Potlatch Server', 'Implementation-Version': version
      }
  }
  
  war {
      baseName = 'gs-convert-jar-to-war'
      version =  '0.1.0'
  }
  
  repositories {
      mavenCentral()
      maven { url "http://repo.spring.io/libs-snapshot" }
      maven { url "http://maven.springframework.org/milestone" }
  }
  
  dependencies {
      compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
  
      compile("org.springframework.boot:spring-boot-starter-tomcat:${springBootVersion}")
  
      compile("org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}")
      compile("org.springframework.boot:spring-boot-starter-aop:${springBootVersion}")
      compile("org.springframework.boot:spring-boot-starter-test:${springBootVersion}")
      compile("org.springframework.boot:spring-boot-starter-data-jpa:${springBootVersion}")
  
      compile("org.springframework.data:spring-data-rest-webmvc")
  
      compile("org.hsqldb:hsqldb")
  
      compile("com.google.guava:guava:17.0")
      compile("org.apache.httpcomponents:httpclient:4.3.4")
      compile("com.squareup.retrofit:retrofit:1.6.0")
      compile("commons-io:commons-io:2.4")
  
      testCompile("junit:junit")
  }
  </code></pre>
  
  <p>This Application file:</p>
  
  <pre class="lang-java prettyprint-override"><code>@EnableAutoConfiguration
  @Configuration
  @ComponentScan
  public class Application extends RepositoryRestMvcConfiguration {
  
      public static void main(String[] args) {
          SpringApplication.run(Application.class, args);
      }
  
      @Override
      public ObjectMapper halObjectMapper() {
          return new ResourcesMapper();
      }
  
  }
  </code></pre>
  
  <p>This controller interface:</p>
  
  <pre class="lang-java prettyprint-override"><code>public interface Controller {
  
      @RequestMapping(value = "/test", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
      public void test();
  }
  </code></pre>
  
  <p>And this controller implementation:</p>
  
  <pre class="lang-java prettyprint-override"><code>@Controller
  public class ControllerImpl implements Controller {
  
      @Override
      public void test() {
      }
  
  }
  </code></pre>
  
  <p>The application starts without errors, but when a send an HTTP GET request to <code>http://localhost:8080/test</code>, I receive this error:</p>
  
  <pre><code>javax.servlet.ServletException: Circular view path [test]: would dispatch back to the current handler URL [/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:263)
      at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:186)
      at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267)
      at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1221)
      at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005)
      at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952)
      at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
      at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
      at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
      at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
      at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
      at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$ApplicationContextHeaderFilter.doFilterInternal(EndpointWebMvcAutoConfiguration.java:280)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
      at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
      at org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration$MetricsFilter.doFilterInternal(MetricFilterAutoConfiguration.java:90)
      at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
      at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
      at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      at java.lang.Thread.run(Thread.java:745)
  </code></pre>
  
  <p><strong>What is my fault?</strong></p>
  
  <p><strong>How can I modify my simple project to avoid this error?</strong></p>