Spring MVC with JSON
現在網站上使用JSON是非常普通的事,在Spring裡面也有直接提供可以回傳json物件,只要宣告回傳物件前加上@ResponseBody。
例如:
public @ResponseBody List<Group> GetGroup(){
List<Group> list = new ArrayList<Group>;
return list;
}
原本我都只用boolean值以及物件,昨天有一個功能想讓他直接回傳字串,結果發現編碼竟然跑掉了!原來StringHttpMessageConverter預設的編碼竟然是ISO-8859-1。
網路上找半天,原本看到的解法都是直接使用:
<property name = "messageConverters">
<list>
<bean class = "org.springframework.http.converter.StringHttpMessageConverter">
<property name = "supportedMediaTypes">
<list>
text/plain;charset=UTF-8
</list>
</property>
</bean>
</list>
</property>
</bean>
但是我試半天一直都不會動,後來才知道,原來使用<mvc:annotation-driven/>是不可以直接這樣設的,因為他會直接註冊DefaultAnnotationHandlerMapping & AnnotationMethodHandlerAdapter,設定會被蓋過去,所以要分別重新註冊。
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
所以…其實沒什麼特別原因,弄個物件直接回傳會比較簡單一點。
註:使用Spring 3.1