[英]Getting 406 Could not find acceptable representation /Spring JSON Test. How to ignore .htm extension in tests?
控制器需要對所有處理程序(包括JSON REST端點)使用.htm擴展名。 我應該如何測試REST端點?
問題:我無法禁用后綴解釋,並且收到406“找不到可接受的表示形式”
嘗試過的嘗試:我檢查了與406相關的stackoverflow帖子,但找不到與在測試中使用“ htm”后綴的情況相關的帖子。 當您從Controller和Test中刪除“ .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();
}
@Test
public void shouldPassChangePasswordBean() throws Exception {
mvc.perform(post("/changePassword.htm")
.accept("*/*")
.param("username", "example")
.param("password", "abcdef")
)
.andExpect(status().isOk()); // Test produces 406 instead of 200
}
}
任何想法?
在較新版本的Spring(我認為4+)中,mime類型首先從后綴確定。
因此,如果您使用.htm
后綴,則即使您不願意,Spring也會默認生成HTML。
一種繞過此方法的方法是使用重寫URL的過濾器。 例如, 曲棍球URL重寫器過濾器
這樣,您可以設置一些規則,例如:
/my/page/that/return/json.htm
為/my/page/that/return/json
以便Spring可以根據Accept
標頭生成數據。
在Spring 5中,嘗試將Web服務的URL更改為.json! 那是正確的解決方法。 此處的詳細信息http://stick2code.blogspot.com/2014/03/solved-orgspringframeworkwebhttpmediaty.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.