当前位置:首页 > 编程笔记 > 正文
已解决

请求代理转发(二)

来自网友在路上 169869提问 提问时间:2023-09-20 09:48:13阅读次数: 69

最佳答案 问答题库698位专家为你答疑解惑

请求代理转发(二)

书接上回,在内部服务代理其他服务时, 这次使用 spring-cloud-gateway-mvc 模块

引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-gateway-mvc</artifactId><version>4.0.7</version>
</dependency>

代理服务

@RestController
public class ProxyController {@Value("${remote.home:http://localhost:9999/}")private URI home;/*** 可代理 get, post , 文件 上传* @param proxy* @param request* @param body* @return* @throws Exception*/@RequestMapping("/proxy/**")public ResponseEntity<?> proxyPath(ProxyExchange<?> proxy, HttpServletRequest request,@RequestBody(required = false) String strBody) throws Exception {String path = proxy.path("/proxy/");HttpMethod method = HttpMethod.resolve(request.getMethod());String url = home.toString() + path + "?" + request.getQueryString();if (method.equals(GET)) {return proxy.uri(url).get();} else if (method.equals(POST)) {if (request instanceof MultipartHttpServletRequest) {MultiValueMap<String, Object> body= new LinkedMultiValueMap<>();MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;for (Map.Entry<String, List<MultipartFile>> entry : multipartRequest.getMultiFileMap().entrySet()) {for (MultipartFile multipartFile : entry.getValue()) {body.add(entry.getKey(), new ByteArrayResource(multipartFile.getBytes()) {@Overridepublic String getFilename() {return multipartFile.getOriginalFilename();}});}}return proxy.uri(url).body(body).post();}return proxy.uri(url).body(strBody).post();}throw new RuntimeException("not support method");}
}

目标服务

/*** get 请求* @param name* @return*/
@GetMapping("/input")
public String input(@RequestParam(required = false) String name) {System.out.println(Thread.currentThread().getName() + " request: " + name);return "success";
}@Autowired
private ObjectMapper objectMapper;/*** post json ect..* @param query* @return* @throws JsonProcessingException*/
@PostMapping("/body")
public String body(@RequestBody DynamicCodeDto query) throws JsonProcessingException {System.out.println(Thread.currentThread().getName() + " request: " + objectMapper.writeValueAsString(query));return "success";
}/*** post 表单* @param query* @return* @throws JsonProcessingException*/
@PostMapping("/form")
public String body2(DynamicCodeDto query) throws JsonProcessingException {System.out.println(Thread.currentThread().getName() + " request: " + objectMapper.writeValueAsString(query));return "success";
}/*** 上传文件* @param file* @param request* @return* @throws IOException*/
@PostMapping("/formdata")
public String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {System.out.println(file.getSize());String s = getClass().getResource("/").getPath()  + file.getOriginalFilename();System.out.println(s);file.transferTo(new File(s));System.out.println(Thread.currentThread().getName() + " request: " + file.getName());return "success";
}

测试:

http-nio-9999-exec-5 request: test
http-nio-9999-exec-4 request: {"className":"1","code":"1"}
http-nio-9999-exec-6 request: {"className":"tsdd","code":"s"}
725445
/boot-mvc/target/classes/a.jpg

good luck!

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"请求代理转发(二)":http://eshow365.cn/6-9919-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!