个人笔记
1-- list的Map排序【根据某个字段】
Collections.sort(platformNationCityLists, new Comparator<Map<String,Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
//进行判断
return ((String)o1.get(“city_code”)).compareTo((String)o2.get(“city_code”));
}});
2-- 前后端时间转换
时间是一个比较常用的类型。显示的时候通常是以String显示的。如果前端参数,前端人员也希望用String作为参数
常用注解
@DatetimeFormat是将String转换成Date,一般前台给后台传值时用
@JsonFormat(pattern=“yyyy-MM-dd”) 将Date转换成String 一般后台传值给前台时
@JsonFormat会让时间以0区时间显示。如果直接使用会少了8小时(我所在的是北京时区)修改为
@JsonFormat(pattern=“yyyy-MM-dd”,timezone=“GMT+8”)
3-- Map 转json字符串
Map<String, Object> outerMap = null;
JSONObject json = JSONObject.fromObject(outerMap);
4–.json字符串 转 Map
String jsondata = (String) entity.get(“jsondata”);
Map<String, Object> map = JSON.parseObject(jsondata);
5–前台是var jsondata = [{“userId”:userId,”username”:username},{“userId”:userId,”username”:username}]
contentType: “application/json”,
data: JSON.stringify(jsondata ),
后台
-------- public R updatePassNickName(@RequestBody String rowDatas){
Integer num = UserAuthDataInfoService.updatePassNickName(rowDatas);
@Override
public Integer updatePassNickName(String rowDatas) {
List<Map<String,Object>> mapList = JSONObject.parseObject(rowDatas, List.class);
6–.前台是var idList = [3,55,67,33,55];
contentType: “application/json”,
data: JSON.stringify(idList ),
后台:
public R readedTipoffs(@RequestBody String idList){
Integer num = UserInfoService.readedTipoffs(idList );
public List<Map<String, Object>> strToListMap(String idList){
String[] passIds = (idList.substring(1,idList.length() -1)).split(",");
List strings = Arrays.asList(passIds);
for (String strId:strings) {}
7-- 如果是null,赋值0
int mobileType = Optional.ofNullable(userExtendInfo.getMobileType()).orElse(0);
8–list的对象的属性排序
rankingList = rankingList.stream().sorted(Comparator.comparing(ScriptManageRespBean::getRanking).reversed()).collect(Collectors.toList());
$.ajax({
url:"/testmap/testMap",
type:“post”,
dataType: “json”,
data:{name:“zhangfan”,age:“18”}
})
后台接收:
1.通过变量接收 :只要变量名称与参数名称一致即可,也可以添加@RequestParam (通常在变量名和参数名一致的情况下省略)
@RequestMapping("/jsontest")
public void test(String name,Integer age )
2.通过pojo对象接收:对象的属性名与参数一致即可,也可以给对象添加@RequestParam (通常在变量名和参数名一致的情况下省略)
@RequestMapping("/jsontest")
public void test(User user ){
String name = user.getName();
Integer age = user.getAge();
}
3.Map接收:@RequestParam
public void testMap (@RequestParam Map<String,Object> info){
Object name = info.get(“name”);
Object age = info.get(“age”);
System.out.println(“name:”+name+“age:”+age);
}
4.字符串接收,然后JSON转换
.
public void test(@RequestBody String jsonData) {
JSONObject jsonObject = JSON.parseObject(jsonData);
String uname= jsonObject.getString(“name”);
Integer age= jsonObject.getInteger(“age”);
}
.
一个疑问:js中传递JSON数据时,为啥有时候要转成JSON字符串,有时候又不用转呢?
1.转成JSON字符串传递方式
前端使用contentType:“application/json; charset=utf-8”的时候,必须要将JSON对象转换为JSON字符串**
var user= {“username” : username,
“password” : password};
$.ajax({
url : “http://…/jsontest.do”,
type : “POST”,
async : true,
contentType: “application/json; charset=utf-8”,
data : JSON.stringify(user),
dataType : ‘json’,
success : function(data) {
}
});
后端参数的用法不灵活,必须使用@RequestBody,这种方式下所有的参数都只能封装在User对象中,不能单独设置参数**
@RequestMapping("/jsontest")
public void test(@RequestBody User user ){
String username = user.getUsername();
String password = user.getPassword();
}
或者
@RequestMapping("/jsontest")
public void test(@RequestBody Map map ){
String username = map.get(“username”).toString();
String password = map.get(“password”).toString();
}
或者
public void test(@RequestBody String jsonData) {
JSONObject jsonObject = JSON.parseObject(jsonData);
String username= jsonObject.getString(“username”);
String username= jsonObject.getString(“password”);
}
9、天数加一天
Date date = DateTime.now();
entity.setTopicRecommendStartTime(date);
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(calendar.DATE,2); //把日期往后增加一天,整数 往后推,负数往前移动
date = calendar.getTime();
entity.setTopicRecommendEndTime(date);
10、初始化数组转换集合List list = Arrays.asList(1, 2, 1, 1, 1);
11、java8 .stream().anyMatch / allMatch / noneMatch用法:
java8 stream接口终端操作 anyMatch,allMatch,noneMatch
anyMatch:判断的条件里,任意一个元素成功,返回true
allMatch:判断条件里的元素,所有的都是,返回true
noneMatch:与allMatch相反,判断条件里的元素,所有的都不是,返回true
count方法,跟List接口中的 .size() 一样,返回的都是这个集合流的元素的长度,不同的是,流是集合的一个高级工厂,中间操作是工厂里的每一道工序,我们对这个流操作完成后,可以进行元素的数量的和;
//类型标签判断
boolean saleModePresent = SearchScriptSaleModeTypeEnum.getAllEnumMap().stream().anyMatch(i -> scriptTagName.equals(i.getTypeName()));
if(saleModePresent){
Integer saleModeNum = Integer.valueOf(SearchScriptSaleModeTypeEnum.getAllEnumMap().stream().filter(info ->
scriptTagName.equals(info.getTypeName()))
.findFirst().get().getTypeNum());
searchScriptCondictionEntity.setScriptSaleModeTagType(saleModeNum);
}