我开始使用spring 3.2的新MVC Testframework,但却无法为所有测试用例获取406个HTTP响应代码。
testcase非常简单
public class LocationResouceTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void testGetLocationByPlzPattern() throws Exception {
// here I need to define the media type as a static var from MediaType
this.mockMvc.perform(get("/someurl?someparam=somevalue")).andExpect(status().isOk());
}
}
相应的资源是
@Controller
// here I need to define the media type as string
@RequestMapping(value = "/someurl", produces = "application/json; charset=UTF-8")
public class LocationResource {
@ResponseBody
@RequestMapping(method = RequestMethod.GET)
public ArrayList<DTO> getAllIndex(@RequestParam("someparam") String param) {
return ... //the list of DTO classes is transformed to json just fine if called with curl
}
}
我确信这是因为一个错误的媒体类型,但我不知道为什么。
失败测试用例的跟踪:
java.lang.AssertionError:状态应为:<200>但为:<406>在org.springframework.test.util.AssertionErrors.fail(AssertionErrors.AsserteQuals(AssertionErrors.java:60)在org.springframework.test.web.servlet.result.StatusResultMatchers$5。Match(StatusResultMatchers.546)在org.springframework.test.web.servlet.mockMVC$1。在ers.model.frameworkmethod.invokeExplory(Frameworkmethod.Java:42)位于org.junit.internal.runners.statements.invokeMethod.evalue(invokeMethod.Java:20)位于org.junit.internal.runners.statements.runbeFores.evalue(RunbeFores.Java:28)位于org.springframework.test.context.junit4.statements.runbeFores.evalue(RunbeFores.Java:28)位于AVA:229)在org.junit.runners.parentrunner.access$000(parentrunner.Java:50)在org.junit.runners.parentrunner.$2。evaluate(parentrunner.Java:222)在org.springframework.test.context.junit4.statements.runbeforestclasscallbacks.evaluate(runbeforestclasscallbacks.Java:61)在trunner.java:390)位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
这可能是由于在spring测试上下文中没有任何MVC配置造成的。当使用类似:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration("/test-context.xml")
...那么test-context.xml
文件还应包括以下内容:
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
<mvc:message-converters>
<bean id="..." class=
"org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
<bean id="..."
class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean id="..."
class="org.springframework.http.converter.FormHttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="contentNegotiationManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="defaultContentType" value="application/json" />
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
如果一个控制器不指定任何特殊内容(例如:@requestmapping
noproduct
),因此不需要任何内容协商,那么就可以轻松地测试上述问题是否是问题所在:
@RequestMapping(value = "/foo", method = RequestMethod.GET)
@ResponseBody
public String getFoo() {
return "bar";
}
...与:
@Test
public void getFoo() throws Exception {
MvcResult result =
this.mockMvc.perform(get("/foo").accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk())
.andReturn();
Assert.assertEquals(result.getResponse().getContentAsString(), "bar");
}
如果您有@configuration
类,则可以添加@enablewebmvc
批注,而不是使用带有
的XML配置。
我在Alamofire 5.3中收到了大量失败的请求,其中响应对象本身为nil,或者错误为“无法解析响应”。我可以从服务器日志中看到,所有这些请求都返回有效。 这是我的设置: API管理器类: AccessTokenInterceptor: 这个拦截器从插入我的授权令牌 我也使用标准路由器的URL刚需转换,编码是通过JSON序列化(字典)或可编码协议(对象) 奇怪的是,我不认为我在做任何不同于我使
主要内容:HTTP响应完整格式HTTP响应完整格式 HTTP的响应也由三部分组成(响应行+响应头+响应体): 以下是一个实际的HTTP响应示例: ①报文协议及版本; ②状态码及状态描述; ③响应报文头,也是由多个属性组成; ④响应报文体,即我们真正要的“干货”。
基本响应 当然,所有的路由及控制器必须返回某个类型的响应,并发送回用户的浏览器。Laravel 提供了几种不同的方法来返回响应。最基本的响应就是从路由或控制器简单的返回一个字符串: $router->get('/', function () { return 'Hello World'; }); 指定的字符串会被框架自动转换成 HTTP 响应。 响应对象 但是,对于大多数路由和控制器行为
Blade 中操作响应的对象是 Response 发送文本 Response#text 用于发送一个状态码为 200 的文本响应 public void responseText(Response response){ response.text("Hello World"); } 发送HTML Response#html 用于发送一个状态码为 200 的HTML响应 public voi
我在解密收到的验证响应SAML消息时遇到问题。我的应用程序连接了两个不同类型的国内流离失所者。第一是ForgeRocks,OpenAM,第二是微软的ADFS服务器。为两个IDP提供了相同的服务提供商元数据文档,该文档包含用于加密和签名的相同证书公钥。 案例01 IdP : OpenAM,ForgeRock结果:正确处理解密和响应。 案例02 IdP:ADFS 2.0,Microsoft结果:解密失
我正在部署一个web应用程序,它在Azure应用程序服务上使用NodeJS、Express和React(插入我的BitBucket repo),但我没有发现成功。要么部署失败,要么声称部署成功,但该站点无法访问,并且一直超时。当我在Azure诊断中检查Docker日志时,我注意到以下几点: 在几个读取