1.前端和后端传参问题
1.接收Request Payload参数
1)方法2
前端若传递Request Payload参数,后端只能用实体类接收,并且要加上注解@RequestBody
2)方法2
public ResTool account(HttpServletRequest request,String userName, String password) {
ServletInputStream is;
try {
is = request.getInputStream();
int nRead = 1;
int nTotalRead = 0;
byte[] bytes = new byte[10240];
while (nRead > 0) {
nRead = is.read(bytes, nTotalRead, bytes.length - nTotalRead);
if (nRead > 0) {
nTotalRead = nTotalRead + nRead;
}
}
// 此处可以接收
String str = new String(bytes, 0, nTotalRead, "utf-8");
return ResTool.build();
} catch (Exception e) {
e.printStackTrace();
}
return ResTool.build();
}
2.跨域解决办法
关于CORS机制的详细解释这里就不多做介绍了,相关的文档资源也很多,推荐查看MDN上“HTTP访问控制(CORS)”文章的讲解。这里主要记录一下,我在nginx上做好配置,已经添加好了“Access-Control-Allow-Origin”头部之后,跨域依旧报错的问题。
如下是nginx的配置片段,已经加好了相应的头部:原因在于此接口的返回码是400,而按照nginx官方文档针对add_header指令的说明,上面的配置,“add_header”指令默认只会给2xx和3xx开头的部分http返回码加上头部,除此返回码之外的其他响应是不会加上对应头部的。
location / {
#proxy_pass http://127.0.0.1:9090/;
proxy_pass http://127.0.0.1:8885/;
//把OPTIONS的请求转成2xx
if ($request_method = 'OPTIONS') {
return 204;
}
add_header "Access-Control-Allow-Origin" "*" always;
add_header "Access-Control-Allow-Credentials" "true" always;
add_header "Access-Control-Allow-Methods" "GET,POST,HEAD,PUT,DELETE,OPTIONS" always;
add_header "Access-Control-Allow-Headers" "access-control-allow-origin, authority, content-type, version-info, X-Requested-With" always;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Request-Proxy-key proxyWS;
proxy_connect_timeout 100;
proxy_send_timeout 100;
proxy_read_timeout 100;
}