Mam następujący kod w jednym z moich kontrolerów:
@Controller
@RequestMapping("/preference")
public class PreferenceController {
@RequestMapping(method = RequestMethod.GET, produces = "text/html")
public String preference() {
return "preference";
}
}
Po prostu próbuję to przetestować za pomocą testu Spring MVC w następujący sposób:
@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());
}
}
Otrzymuję następujący wyjątek:
Okrągła ścieżka widoku [preferencja]: spowoduje ponowne wysłanie z powrotem do bieżącego adresu URL modułu obsługi [/ preferencje]. Sprawdź konfigurację ViewResolver! (Wskazówka: może to być wynikiem nieokreślonego widoku, z powodu domyślnego generowania nazwy widoku).
Wydaje mi się dziwne, że działa dobrze, gdy ładuję „pełną” konfigurację kontekstu, która zawiera szablon i narzędzia do rozpoznawania widoku, jak pokazano poniżej:
<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>
Doskonale zdaję sobie sprawę, że przedrostek dodany przez program do rozpoznawania szablonów zapewnia, że nie ma „okrągłej ścieżki widoku”, gdy aplikacja używa tego narzędzia do rozpoznawania szablonów.
Ale jak mam przetestować moją aplikację za pomocą testu Spring MVC?
@RestController
zamiast@Controller
ViewResolver
którego używasz, gdy się nie powiedzie?