前言
最近準備深入學習Android網(wǎng)絡(luò)請求這一塊,為了能夠更好的了解移動端在請求的過程棚亩,便準備自己動手通過SpringMVC搭建一個服務(wù)端。由于自己spring這塊的知識點掌握地不夠硕并,整個過程遇到了一些問題观蓄,在這做個記錄。
正題
在實際開發(fā)中该镣,服務(wù)端的數(shù)據(jù)是以json串的形式發(fā)送給移動端的,因此只是實現(xiàn)服務(wù)端能夠返回json串就達到我的目的了响谓∷鸷希可以通過兩種方式來實現(xiàn)返回json串:
- 先將數(shù)據(jù)轉(zhuǎn)換為json串,然后通過
HttpServletResponse
對象中的PrintWriter
對象中的write()
方法來實現(xiàn)數(shù)據(jù)的返回娘纷。
參考代碼:
public static void printAjax(HttpServletResponse response, String result) {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
try {
response.getWriter().write(result);
} catch (IOException e) {
e.printStackTrace();
}
} - 通過spring的
@ResponseBody
實現(xiàn)嫁审,它用于將Controller的方法返回的對象,通過適當?shù)腍ttpMessageConverter轉(zhuǎn)換為指定格式后赖晶,寫入到Response對象的body數(shù)據(jù)區(qū)
律适。因此通過配置可以轉(zhuǎn)換成的json的HttpMessageConverter
,就能返回json串了遏插。
配置完HttpMessageConverter
捂贿,然后僅僅只需要在Controller
方法上添加@ResponseBody
注解就歐了,這種方式明顯逼格上要高一點胳嘲,果斷采用此種方式來實現(xiàn)厂僧。(畢竟高逼格是我一直的追求)
實現(xiàn)步驟
- 在maven中添加依賴,由于我所使用的spring版本是4.0.4了牛,因而不支持Gson(spring 4.1之后才支持Gson颜屠,不知道是否可以通過其他辦法支持gson辰妙,沒有深入研究,畢竟只要能夠給移動端返回json串就ok了)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.0.1</version>
</dependency>
- 配置
spring-mvc.xml
文件
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json; charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven> - 在Controller中實現(xiàn)方法
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody // 重點在這甫窟,其余都是浮云
public Map<String, String> login(String username, String password, HttpServletRequest request, HttpServletResponse response) {
TsUser loginUser = tsLoginService.consoleLogin(request, response, username, password, false, request.getRemoteAddr());
Map<String, String> map = new HashMap<String, String>();
map.put("username", loginUser.getUsername());
map.put("ip", loginUser.getRegisterIp());
return map;
}
這就大功告成了密浑!