Tengo el siguiente código en uno de mis controladores:
@Controller
@RequestMapping("/preference")
public class PreferenceController {
@RequestMapping(method = RequestMethod.GET, produces = "text/html")
public String preference() {
return "preference";
}
}
Simplemente estoy tratando de probarlo usando la prueba Spring MVC de la siguiente manera:
@ContextConfiguration
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class PreferenceControllerTest {
@Autowired
private WebApplicationContext ctx;
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = webAppContextSetup(ctx).build();
}
@Test
public void circularViewPathIssue() throws Exception {
mockMvc.perform(get("/preference"))
.andDo(print());
}
}
Recibo la siguiente excepción:
Ruta de vista circular [preferencia]: se enviaría de nuevo a la URL del controlador actual [/ preferencia] nuevamente. ¡Compruebe la configuración de ViewResolver! (Sugerencia: esto puede ser el resultado de una vista no especificada, debido a la generación de nombre de vista predeterminada).
Lo que encuentro extraño es que funciona bien cuando cargo la configuración de contexto "completa" que incluye la plantilla y los resolutores de vista como se muestra a continuación:
<bean class="org.thymeleaf.templateresolver.ServletContextTemplateResolver" id="webTemplateResolver">
<property name="prefix" value="WEB-INF/web-templates/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5" />
<property name="characterEncoding" value="UTF-8" />
<property name="order" value="2" />
<property name="cacheable" value="false" />
</bean>
Soy consciente de que el prefijo agregado por el solucionador de plantillas garantiza que no haya una "ruta de vista circular" cuando la aplicación utiliza este solucionador de plantillas.
Pero entonces, ¿cómo se supone que debo probar mi aplicación usando la prueba Spring MVC?
@RestController
lugar de@Controller
ViewResolver
que usas cuando está fallando?