Java 基礎課八:Java 使用 http 通信

Java 使用 Http

  1. Java 使用 HttpURLConnection,HttpClient,RestTemplate,和 Feign 等,進行 http 通信;

  2. URLEncoder和URLDecoder,用於字符串向 application/x-www-form-urlencoded 的 MIME 類型字符串的轉換;

	String param_de = URLDecoder.decode("%E7%96%AF");
	String param_en = URLEncoder.encode("瘋狂java講義");
	get 請求,參數通過 url?key=URLEncoder.encode(value,"utf-8") 攜帶
	post 請求,如果 content-type 是 application/x-www-form-urlencoded,請求體是
		"key1=URLEncoder.encode(val1)&key2=URLEncoder.encode(val2)".getBytes("utf-8");
	如果是 application/json,請求體是 JSONObject.toJSONString("http請求體數據").getBytes("utf-8");	
	如果是 multipart/form-data:...
	如果是 text/plain,...
  1. 注意 request.setCharacterEncoding(“UTF-8”) 這個方法,只對 post 請求有用,因爲只會對請求體中的內容進行編碼;

RestFul 服務

  1. 面向資源的服務,通過 URL 定位資源,通過 HTTP 方法定義資源操作,如,GET 請求,讀取資源,POST 請求,創建資源,PUT/PATCH 請求,更新資源,DELETE 請求,刪除資源;

  2. Spring 框架,對 RestFul 服務進行封裝,使用到 @ResponseBody,@RequestBody,@PathVariable 等註解,其中@ResponseBody 中的 produces 表示只處理指定的 Accept 的請求,@RequestBody 的 consumes表示只處理指定的 content-type 的請求;注意需要配置消息轉換器;

	 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="stringConverter" />
                <ref bean="jacksonConverter" />
            </list>
        </property>
    </bean>
    <bean id="jacksonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>			
                <value>application/json;charset=utf-8</value>
            </list>
        </property>
    </bean>
    <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>
  1. springboot 中是通過自動配置類 … 來自動配置的;

  2. 異常處理,通過註解 @ExceptionHandler(MyExp.class),@ResponseStatus(HttpStatus.NOT_FOUND) 來完成;

HttpURLConnection

HttpClient和HttpGet,HttpPost

RestTemplate

Feign

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章