控制器需要为所有处理程序使用 .htm 扩展名,包括 JSON REST 端点。我应该如何测试 REST 端点?
问题: 我无法禁用后缀解释,并且收到 406“找不到可接受的表示”
尝试过的尝试: 我查看了与 406 相关的 stackoverflow 上的帖子,但找不到与在测试中使用“htm”后缀的情况相关的帖子。当您从控制器和测试中删除“.htm”后缀时 - 测试通过。
这是带有 /changePassword.htm 端点的控制器:
@Controller
public class MainController {
public static class ResultBean {
private final String result;
public String getResult() {
return result;
}
public ResultBean(String result) {
this.result = result;
}
}
@RequestMapping(value="/changePassword.htm", method= RequestMethod.POST, produces = { "application/json" })
public @ResponseBody ResultBean changePassword (
@RequestParam("username") String username, @RequestParam("password") String password) {
return new ResultBean("OK");
}
}
这是带有配置的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = { HomeControllerTest.Config.class })
public class HomeControllerTest {
@InjectMocks
private MainController controller = new MainController();
private MockMvc mvc;
@Configuration
@EnableWebMvc
public static class Config extends WebMvcConfigurerAdapter {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false)
.favorParameter(true)
.parameterName("mediaType")
.ignoreUnknownPathExtensions(true)
.ignoreAcceptHeader(false)
.useJaf(false)
.defaultContentType(MediaType.APPLICATION_JSON);
}
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
}
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mvc = MockMvcBuilders.standaloneSetup(controller)
.build();
}
任何想法?
宝慕林4294392
相关分类