2024年java后端面试题及答案整理

java后端面试题及答案整理一 支持 Get 请求传 Text 格式 1 porm 文件 lt dependency gt lt groupId gt org apache httpcomponen lt groupId gt lt artifactId gt httpclient lt artifactId gt lt dependency gt 2

 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> 

2.需要自定义Entity,使get可传Text

import java.net.URI; import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase { 
    private final static String METHOD_NAME = "GET"; @Override public String getMethod() { 
    return METHOD_NAME; } public HttpGetWithEntity() { 
    super(); } public HttpGetWithEntity(final URI uri) { 
    super(); setURI(uri); } HttpGetWithEntity(final String uri) { 
    super(); setURI(URI.create(uri)); } } 

3.Util类

import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; import com.hongcheng.Constants; import com.hongcheng.config.PlatformConf; import com.hongcheng.exception.GlobalException; import com.hongcheng.result.CodeMsg; import com.hongcheng.result.CodeNumEnum; import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.IdleConnectionEvictor; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HttpUtils { 
    private HttpUtils() { 
   } private static final Logger LOG = LoggerFactory.getLogger("job"); private static final Integer CLIENT_SOCKET_TIMEOUT = PlatformConf.getInt(Constants.HTTP_CLIENT_SOCKET_TIMEOUT); private static final Integer CLIENT_CONNECTION_TIMEOUT = PlatformConf.getInt(Constants.HTTP_CLIENT_CONNECTION_TIMEOUT); private static final Integer CLIENT_CONNECTION_REQ_TIMEOUT = PlatformConf.getInt(Constants.HTTP_CLIENT_CONNECTION_REQ_TIMEOUT); private static final String ENCODEING = "UTF-8"; private static PoolingHttpClientConnectionManager gcm = null; private static IdleConnectionEvictor idleThread = null; private static CloseableHttpClient httpClient = null; static { 
    init(); } public static void init() { 
    Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https", SSLConnectionSocketFactory.getSocketFactory()) .build(); gcm = new PoolingHttpClientConnectionManager(registry); gcm.setMaxTotal(80); gcm.setDefaultMaxPerRoute(80); RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(CLIENT_CONNECTION_TIMEOUT) // 设置连接超时 .setSocketTimeout(CLIENT_SOCKET_TIMEOUT) // 设置读取超时 .setConnectionRequestTimeout(CLIENT_CONNECTION_REQ_TIMEOUT) // 设置从连接池获取连接实例的超时 .build(); HttpClientBuilder httpClientBuilder = HttpClients.custom(); httpClient = httpClientBuilder .setConnectionManager(gcm) .setConnectionManagerShared(true) .setDefaultRequestConfig(requestConfig) .build(); idleThread = new IdleConnectionEvictor(gcm, 30, TimeUnit.SECONDS); idleThread.start(); } public static String doGetWithBodyText(String url, Map<String, String> headerMap, String param, String name) throws GlobalException { 
    CloseableHttpResponse response = null; String result = ""; try { 
    long startTime = System.currentTimeMillis(); //获取开始时间 HttpGetWithEntity httpGetWithEntity = new HttpGetWithEntity(url); HttpEntity httpEntity = new StringEntity(param, ContentType.DEFAULT_TEXT); httpGetWithEntity.setEntity(httpEntity); // 配置请求参数实例 RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CLIENT_CONNECTION_TIMEOUT)// 设置连接主机服务超时时间 .setConnectionRequestTimeout(CLIENT_CONNECTION_REQ_TIMEOUT)// 设置连接请求超时时间 .setSocketTimeout(CLIENT_SOCKET_TIMEOUT)// 设置读取数据连接超时时间 .build(); // 为httpPost实例设置配置 httpGetWithEntity.setConfig(requestConfig); //设置请求头 if (headerMap != null && headerMap.size() > 0) { 
    headerMap.keySet().forEach(str -> httpGetWithEntity.addHeader(str, headerMap.get(str))); } //执行请求操作,并拿到结果(同步阻塞) response = httpClient.execute(httpGetWithEntity); // 通过返回对象获取返回数据 HttpEntity entity = response.getEntity(); // 通过EntityUtils中的toString方法将结果转换为字符串 result = EntityUtils.toString(entity); long endTime = System.currentTimeMillis(); //获取结束时间 LOG.info("{} request url running time:{} ms", name, endTime - startTime); return result; } catch (IOException e) { 
    LOG.error("http client get error", e); throw new GlobalException(new CodeMsg(CodeNumEnum.SERVER_ERROR, "连接异常")); } finally { 
    //关闭资源 IOUtils.closeQuietly(response, e -> LOG.error("Rest exception: ", e)); } } } 
知秋君
上一篇 2024-11-14 09:36
下一篇 2024-07-03 19:48

相关推荐