把request对象中的请求参数封装到bean中/生成UUID

本文介绍了一个实用工具类WebUtils,该类提供了将HTTP请求中的参数封装到Java Bean的方法,以及生成唯一标识符UUID的功能。这些功能在Web应用开发中非常常见,能够简化代码并提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package me.gacl.util;

import java.util.Enumeration;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;

/**
 * @author gacl
 * 把request对象中的请求参数封装到bean中
 */
public class WebUtils {

	/**
	 * 将request对象转换成T对象
	 * @param request 
	 * @param clazz
	 * @return
	 */
	public static <T> T request2Bean(HttpServletRequest request,Class<T> clazz){
		try{
			T bean = clazz.newInstance();
			Enumeration<String> e = request.getParameterNames(); 
			while(e.hasMoreElements()){
				String name = (String) e.nextElement();
				String value = request.getParameter(name);
				BeanUtils.setProperty(bean, name, value);
			}
			return bean;
		}catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	
	/**
	 * 生成UUID
	 * @return
	 */
	public static String makeId(){
		return UUID.randomUUID().toString();
	}
	
}

/** * 注册一个 RestTemplate Bean */ @Bean public RestTemplate restTemplate() { return new RestTemplate(); } } @RestController @RequestMapping("/api") class ForwardController { private final RestTemplate restTemplate; // 目标地址(需要转发的URL调整) private final String TARGET_URL = "http://18.1.24.111:30556/ais/bot/rpc/dcc/sseDialog"; public ForwardController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @PostMapping("/forward") public ResponseEntity<byte[]> forwardRequest( @RequestBody(required = false) String requestBody, // 拦截原始请求体 HttpServletRequest request ) { // 1. 收集原请求头 HttpHeaders headers = new HttpHeaders(); Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String headerName = headerNames.nextElement(); if (!shouldSkipHeader(headerName)) { headers.add(headerName, request.getHeader(headerName)); } } // 2. 覆盖/添加必须写死的头 headers.set("x-tenantid", "zhongche"); headers.set("x-source", "KS"); // 3. 构造请求实体 HttpEntity<String> httpEntity = new HttpEntity<>(requestBody, headers); // 4. 使用 RestTemplate 转发到目标地址 // 使用 byte[] 作为响应体类型,方便原样返回 ResponseEntity<byte[]> responseEntity = restTemplate.exchange( TARGET_URL, HttpMethod.POST, httpEntity, byte[].class ); // 5. 将下游响应返回 // 如果需要返回特定 Content-Type,可以在这里配置 HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.putAll(responseEntity.getHeaders()); return new ResponseEntity<>(responseEntity.getBody(), responseHeaders, responseEntity.getStatusCode()); } /** * 判断是否跳过某些头(例如 Host、Content-Length 等) */ private boolean shouldSkipHeader(String headerName) { String lower
最新发布
03-19
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值