1.前端和后端传参问题

1.接收Request Payload参数

1)方法2

前端若传递Request Payload参数,后端只能用实体类接收,并且要加上注解@RequestBody

2)方法2

  1. public ResTool account(HttpServletRequest request,String userName, String password) {
  2. ServletInputStream is;
  3. try {
  4. is = request.getInputStream();
  5. int nRead = 1;
  6. int nTotalRead = 0;
  7. byte[] bytes = new byte[10240];
  8. while (nRead > 0) {
  9. nRead = is.read(bytes, nTotalRead, bytes.length - nTotalRead);
  10. if (nRead > 0) {
  11. nTotalRead = nTotalRead + nRead;
  12. }
  13. }
  14. // 此处可以接收
  15. String str = new String(bytes, 0, nTotalRead, "utf-8");
  16. return ResTool.build();
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. return ResTool.build();
  21. }

2.跨域解决办法

关于CORS机制的详细解释这里就不多做介绍了,相关的文档资源也很多,推荐查看MDN上“HTTP访问控制(CORS)”文章的讲解。这里主要记录一下,我在nginx上做好配置,已经添加好了“Access-Control-Allow-Origin”头部之后,跨域依旧报错的问题。
image.png

如下是nginx的配置片段,已经加好了相应的头部:原因在于此接口的返回码是400,而按照nginx官方文档针对add_header指令的说明,上面的配置,“add_header”指令默认只会给2xx和3xx开头的部分http返回码加上头部,除此返回码之外的其他响应是不会加上对应头部的。

  1. location / {
  2. #proxy_pass http://127.0.0.1:9090/;
  3. proxy_pass http://127.0.0.1:8885/;
  4. //把OPTIONS的请求转成2xx
  5. if ($request_method = 'OPTIONS') {
  6. return 204;
  7. }
  8. add_header "Access-Control-Allow-Origin" "*" always;
  9. add_header "Access-Control-Allow-Credentials" "true" always;
  10. add_header "Access-Control-Allow-Methods" "GET,POST,HEAD,PUT,DELETE,OPTIONS" always;
  11. add_header "Access-Control-Allow-Headers" "access-control-allow-origin, authority, content-type, version-info, X-Requested-With" always;
  12. proxy_set_header Host $host:$server_port;
  13. proxy_set_header X-Real-IP $remote_addr;
  14. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  15. proxy_set_header X-Request-Proxy-key proxyWS;
  16. proxy_connect_timeout 100;
  17. proxy_send_timeout 100;
  18. proxy_read_timeout 100;
  19. }