J'ai le code suivant dans l'un de mes contrôleurs:
@Controller
@RequestMapping("/preference")
public class PreferenceController {
@RequestMapping(method = RequestMethod.GET, produces = "text/html")
public String preference() {
return "preference";
}
}
J'essaie simplement de le tester en utilisant le test Spring MVC comme suit:
@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());
}
}
Je reçois l'exception suivante:
Chemin de vue circulaire [préférence]: renvoie à nouveau à l'URL du gestionnaire actuel [/ préférence]. Vérifiez votre configuration ViewResolver! (Conseil: cela peut être le résultat d'une vue non spécifiée, en raison de la génération de nom de vue par défaut.)
Ce que je trouve étrange, c'est que cela fonctionne bien lorsque je charge la configuration de contexte "complète" qui comprend le modèle et les résolveurs de vue comme indiqué ci-dessous:
<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>
Je suis bien conscient que le préfixe ajouté par le résolveur de modèle garantit qu'il n'y a pas de "chemin de vue circulaire" lorsque l'application utilise ce résolveur de modèle.
Mais alors comment je suis censé tester mon application à l'aide du test Spring MVC?
@RestController
place de@Controller
ViewResolver
vous utilisez en cas d'échec?