- 真的没发现错误时,要积极地 clean Idea,3次了都是这样!!!
- Feign:需要多个生产者时,要指明其url,不然会报错,例如
@FeignClient(name = ServiceNameConstants.SYSTEM_SERVICE,
url = "http://127.0.0.1:8001",
fallback = SysUserLoginFallback.class,
fallbackFactory = SysUserLoginFallbackFactory.class,
configuration = FeignConfig.class)
- Feign接口的方法中,如果有多个参数,要加@RequestParam注解,如下:
@RequestMapping("/sysUser/login/doLogin")
public String login(@RequestParam("loginName") String loginName,
@RequestParam("password") String password,
@RequestParam("captcha") String captcha)
- 当为Get请求时,Feign消费者interface的参数一定要加上@RequestParam或@ResponseBody,否则报错,Request method ‘POST’ not supported!!!
- 重定向:中文做参数进行重定向时,会乱码,解决方法如下:
return "redirect:/feign/find/" + URLEncoder.encode(logiName, "UTF-8");
- thymeleaf添加页面隐藏值,传递数据【注意th:value,不是th:text】
<input type="hidden" id="areaUuid" name="areaUuid" th:value="${areaUuid}" />
- thymeleaf路径请求问题:
1)请求参数为JSON对象,@RequestBody @RequestParam 前端jQuery代码请求
参考大佬:
添加链接描述
后台接口参数被@RequestBody修饰:
@PostMapping("feign/sysUser/update")
@ResponseBody
public String updateInfo(@RequestBody SysUser sysUser)
<button class="btn btn-success btn-block" type="button" onclick="updateInfo()">
修改用户信息</button>
<script th:inline="javascript">
function updateInfo() {
var formObject = {};
var formArray = $("#sysUserInfo").serializeArray();
$.each(formArray, function (i,item) {
formObject[item.name] = item.value;
});
console.log(formObject);
// var loginName = $('#loginName').val();
// console.info(loginName);
// var phonenumber = $('#phonenumber').val();
// var email = $('#email').val();
// var userId = $('#userId').val();
$.ajax({
url:"/feign/sysUser/update",
type:"POST",
contentType:"application/json;charset=utf-8",
data: JSON.stringify(formObject),
async: true, // 这个一定要加!!!后段才会接收到数据,前端的负载也不会为空
// data:JSON.stringify({"loginName":loginName, "phonenumber":phonenumber, "email":email, "userId":userId}),
success:function(data) {
if (data == 1){
alert("修改成功!");
window.parent.location.reload();
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}else if (data == 0){
alert("修改失败!");
}
},
error:function () {
alert("修改失败,请重试!")
}
})
}
</script>
2)接口参数类似@RequestHeader(“current-id”) String userId,ajax传参方式为:
$.ajax({
beforeSend: function (request) {
request.setRequestHeader("current-id", userId);
}
... ...
})
- 使标签内容不可改的方法,见大神的文章,input标签内容不可改,但可传递
- 使用Ajax来跳转的时候,会把返回的所有东西都用Ajax的success来处理。也会把返回的页面也当成数据来处理,如果想要跳转就必须在Ajax的success里来定义跳转的路径,这时候才是使用Ajax时真正的跳转,见大佬文章:使用Ajax实现页面跳转
- thymeleaf中的js,获取接口传过来的值
非常感谢大佬的文章解决了我的问题,Thymeleaf教程 (十二) 标签内,js中使用表达式
帮助我的地方是“给js变量赋值”,如下,非常详细:
<script th:inline="javascript">
/*<![CDATA[*/
...
var username = /*[[${session.user.name}]]*/ 'Sebastian';
...
/*]]>*/
</script>
/*[[…]]*/表达式的理解如下:
/*…*/中的内容在用浏览器打开静态 网页时,会被忽略.
‘Sebastian’会在浏览器中显示。静态时。
Thymeleaf解析时,会解析/*[[…]]*/的内容,并把获得的值替换掉/*[[…]]*/后面的内容。
所以,解析后的结果如下:
<script th:inline="javascript">
/*<![CDATA[*/
...
var username = 'John Apricot';
...
/*]]>*/
</script>
- Feign调用微服务,导出excel时,1)注意用ResponseEntity<byte[]>接收;2)注意ajax没法实现文件下载,只能读取,可以使用window.location.href,例如:
<a class="btn btn-sm btn-success" type="button" onclick="exportDevice()">导出数据</a>
function exportDevice(){
var aUuid = $('#aUuid').val();
console.log(aUuid);
window.location.href="/feign/activity/exportDeviceTypeList?"+"activityUuid="+ aUuid + "&startTime="+"&endTime=";
};
- Feign调用微服务,生成验证码时,注意用byte[]来转换
- 在大多数情况下,我们都是采用 #{} 读取参数内容。但是在一些特殊的情况下,我们还是需要使用 ${} 读取参数的。比如有两张表,分别是 dept 和 dept_01。如果需要在查询语句中动态指定表名,就只能使用 ${} 。再比如:需要动态的指定查询中的排序字段,此时也只能使用 ${},简单来说,在 JDBC 不支持使用占位符的地方,都可以使用 ${}。
- 数据库查询字段为空,用List<Map>接收不到空值字段,call-setters-on-nulls=true 不生效问题
- 前端,避免页面自动刷新,可能是使用了bootstrap,其导航栏使用了表单,所以会自动刷新,因此,加上
window.event.returnValue = false;
就可以解决问题了。参考大佬提交表单时页面自动刷新的相关问题及解决办法 - 动态创建表格 1. HTML+JS创建表格
2.HTML页面创建动态表格JavaScript和jQuery
3.js动态生成表格 - 当接口用**@RequestBody**来接收前端传递过来的json字符串时,前端ajax不可以用GET方式,要用POST方式进行提交,因为GET方式无请求体。@RequestBody接收的是请求体里的数据,所以其只能有一个。而@RequestParam接收的是key-value里面的参数,可以用于普通元素、数组、集合、对象等接收,可以有多个。见大佬文章@RequestBody与post请求的关系
- Feign发送get请求,传递对象参数,没有@RequestBody(因为菜单导航栏有他,所以就做成了get请求),解决:@SpringQueryMap 可以用来修饰pojo类,达到使用对象传递参数的需求。1.Feign发送get请求使用对象传参问题,@SpringQueryMap解析传参对象父类属性解决方案 2.【Java用法】Feign @QueryMap支持,@SpringQueryMap注解 feign的get传参方式
- 前端ajax发送JSON时注意,dataType是指后台返回的数据类型,不要轻易写json,否则会出错,即使请求成功了,也会进入到error:function(){…}。这时也可以不写。
- Feign传递请求头tokenFeign调用进行token鉴权
- thymeleaf有值为null时,会报错,解决:thymeleaf 空值的处理
报错合集: - 如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。
- 报错如下:参数配置错误,原因可能是:1)插入的变量长度大于数据库字段长度;2)属性不对应;3)#{} 与 ${};4)对于时间,没插入
2022-05-26 16:17:19.432 WARN [,276205c01357ecde,ebd9c09fda26c36e,true] 9852 --- [ XNIO-5 task-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.uniigym.common.exception.BusinessException:
### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
values (
'7c1b0c765d804b89b5103a709b4c9151',
' at line 11
### The error may exist in file [D:\xxx\target\classes\mapper\database\TUniigymUserMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
- 报错如下:
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type
java.time.LocalDateTimefrom String "2022-05-19": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2022-05-19' could not be parsed at index 10;
接口接收参数后将该字符串转为日期时,发生错误,项目中使用fastjson来处理json数据,解决:在对应的字段上加@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
或@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
- 解析json时报错,看评论:{}形式的数据,使用parseObject,[]形式的数据,使用parseArray添加链接描述com.alibaba.fastjson.JSONException: syntax error, expect {, actual , pos 0