《Angular之400错误解析》
前言:
千锤万凿出深山,烈火焚烧若等闲。
正文:
一。问题描述
二。问题定位
不通过nginx代理,直接使用ip+端口可以正常显示,但是一旦走nginx代理的地址,便出现400错误,原因解析:http://ip:port/library/resources/book/getBookBasicByISBN/{isbn}?isbn=9787513517409
restful风格与表单提交方式混搭,一旦走nginx代理就无法通过真正后端服务,因为nginx代理会将花括号解析,此时url地址传递到真正后端时就不一致,继而报400错误。
分析上面的url:http://ip:port/library/resources/book/getBookBasicByISBN/{isbn},遵循restful风格的url地址拼接,传递的参数是{isbn},一旦前端传递参数过去之后,url地址变成了http://ip:port/library/resources/book/getBookBasicByISBN/9787513517409
restful风格。
J2EE规范@PathParam,Spring中可以用@PathVariable,最终的URL是替换了{isbn}的url
三。解决方案
JAVA分为三个版本:JAVASE、JAVAEE、JAVAME,library采用JAVAEE,企业级应用,JAVA的规范有十三种,library采用jersery和EJB。
(1)Jersey后端,restful风格注解应使用@PathParam:
Spring后端,restful风格注解应使用@PathVariable:
(2)传统的表单提交方式:
http://ip:port/library/resources/book/getBookBasicByISBN前端拼接之后,完整的URL地址转变为:
http://ip:port/library/resources/book/getBookBasicByISBN?isbn=9787513517409表单形式。注解应使用J2EE规范的@QueryParam或spring的@RequestParam,最终的url为xxxx?userId=yyyy
Jersey后端,表单提交使用@QueryParam:
spring后端,表单提交使用@RequestParam:
结语:
宝剑锋从磨砺出,梅花香自苦寒来。
标签:
相关文章
-
无相关信息