SpringMVC3.2.x整合Fastjson与Controller单元测试

SpringMVC与Fastjson整合相当简单,只要在pom引入fastjson包后,配置一下SpringMVC的messageConverter就可以使用了。

 <mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
	<mvc:message-converters register-defaults="true">
		<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
  	</mvc:message-converters>
</mvc:annotation-driven>

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <property name="mediaTypes" >
        <value>
    	  json=application/json
    	  xml=application/xml
    	 </value>
    </property>
</bean>

但是如果在单元测试时,使用mockMvc测试controller

    private MockMvc mockMvc ;
    @Before
    	public void setUp(){
            PersonalController ctrl = this.applicationContext.getBean(PersonalController.class);
    	mockMvc = MockMvcBuilders.standaloneSetup(ctrl).build();
    }
    @Test
    public void testGet() throws Exception{
    	MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders
    					.get("/p/list.json","json")
    					.accept(MediaType.APPLICATION_JSON)
    					.param("param1", "x")
    					.param("param2", "y")
    				).andReturn();
    	int status = mvcResult.getResponse().getStatus();
    	System.out.println("status : "+status);
    	String result = mvcResult.getResponse().getContentAsString();
    	System.out.println("result:"+result);
    //	Assert.assertEquals("test get  ... ", "","");
    }

此时会报406错误,也就是HTTP 406,NOT ACCEPTABLE。这是因为在MockMvcBuilders.standaloneSetup(ctrl).build()内部,使用默认的messageConverter对message进行转换。

在此输入图片描述

在此输入图片描述 对的,这里的messageConverters没有读取你配置的messageConverter。

在此输入图片描述

解决方法也很简单,只要引入SpringMVC默认的jackson依赖就可以了。之所以报406,是因为缺少可用的消息转化器,spring默认的消息转化器都配置了Content-Type。如果我的请求头里指定了ACCEPT为application/json,但是由于没有能转换此种类型的转换器。就会导致406错误。

补充一下,mockMvc测试的时候,使用standaloneSetup方式测试,也可指定MessageConverter或拦截器,添加方法如下(需要在xml装配需要注入的类):

    XXController ctrl = this.applicationContext.getBean(XXController .class);
    		FastJsonHttpMessageConverter fastjsonMC = this.applicationContext.getBean(FastJsonHttpMessageConverter.class);
    		StringHttpMessageConverter stringMC = this.applicationContext.getBean(StringHttpMessageConverter.class);
    		MessageInterceptor inter = this.applicationContext.getBean(MessageInterceptor.class);
    		mockMvc = MockMvcBuilders.standaloneSetup(ctrl)
    				.setMessageConverters(fastjsonMC,stringMC)
    				.addInterceptors(inter)
    				.build();

转载于:https://my.oschina.net/bfleeee/blog/335487

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值