前端debug console data 发现值获取正确
到后端发现 接受值有null 值 明明传过来了。。。。。。。。
1. 前端值正确
2. 后端 有null值
仔细查看数据库发现 有下划线
修改实体类 驼峰命名的实体类属性
再次发送
<%--
Created by IntelliJ IDEA.
User: 10202
Date: 2022/4/27
Time: 14:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
登录:界面
健身房登录系统
<%-- --%>
发现ajax 向后台传递json数据 驼峰大小写会失效 导致 后面
接不到数据 或者只接受到一半 实体类手动改成下划线 就解决了
目前只发现json会这样 单纯的requestMapping 不影响
实体类赋值一般采用set方法注入 会调用实体类set方法
由于lombook 会自动生成get set方法
但是如果实体类 属性名 命名不规范 根据底层源码 会自动截取substring(2) 后面会自动转大写
public static long fnv1a_64_lower(String key) {
long hashCode = -3750763034362895579L;
for(int i = 0; i < key.length(); ++i) {
char ch = key.charAt(i);
if (ch != '_' && ch != '-') {
if (ch >= 'A' && ch <= 'Z') {
ch = (char)(ch + 32);
}
hashCode ^= (long)ch;
hashCode *= 1099511628211L;
}
}
return hashCode;
}
由于lombook 会自动生成 set方法 会不正常。。。。。
需要自己手动生成 set方法
spring默认使用的是jackson处理json的序列化和反序列化,@JsonProperty是Jackson的注解,常用于属性上。
@JsonProperty(value = “dpt_id”, required = true)
private String scheduleId;
@JsonProperty(value = “triggers”, required = true)
private List triggers;
value属性:代表该属性序列化和反序列化的时候的key值。
required属性:默认false,例如当required=false的时候,当反序列化的时候没有找到key值,就会报错。
例如:
@JsonProperty(value = “dpt_id”, required = false)
private String scheduleId;
可以使用Map传输数据,Map的key=dpt_id,对应的value值就是scheduleld的值,而不用使用对象传递数据,用属性的getXXX方法获取。
作用是类似起别名
@JsonProperty底层源码如下
package com.fasterxml.jackson.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonProperty {
String USE_DEFAULT_NAME = "";
int INDEX_UNKNOWN = -1;
String value() default "";
boolean required() default false;
int index() default -1;
String defaultValue() default "";
JsonProperty.Access access() default JsonProperty.Access.AUTO;
public static enum Access {
AUTO,
READ_ONLY,
WRITE_ONLY,
READ_WRITE;
private Access() {
}
}
}