我不知道發生了什么,但由于某種原因,我的屬性中的 is 前綴被洗掉了。
我什至從 Lombok 中洗掉了注釋并手動創建了 getter 和 setter,但由于某種原因,我收到了這個奇怪的錯誤。
我有一個名為 isAuthenticated 的道具,它必須回傳到瀏覽器,出于某種原因,我正在通過身份驗證。
下面是代碼: //API中的端點:@GetMapping("/auth") public EmployeeState getEmployeeState(HttpServletRequest request) { return employeeService.getEmployeeState(request.getSession()); }
服務方法:
public EmployeeState getEmployeeState(HttpSession session) {
EmployeeState employeeState = new EmployeeState();
employeeState.setIsAuthenticated(SecurityContextHolder.getContext().getAuthentication().isAuthenticated());
if (employeeState.isAuthenticated()){
if (session.getAttribute("employeeNumber") != null){
Employee employee = employeeRepository.getEmployeeByEmployeeNumber(session.getAttribute("employeeNumber").toString()).get();
employeeState.setFirstName(employee.getFirstName());
employeeState.setLastName(employee.getLastName());
employeeState.setEmployeeNumber(employee.getEmployeeNumber());
}
}
return employeeState;
}
這是模型,回應應該回傳:
public class EmployeeState {
private String firstName;
private String lastName;
private String employeeNumber;
private boolean isAuthenticated;
public EmployeeState(){
}
public EmployeeState(String firstName, String lastName, String employeeNumber, boolean isAuthenticated) {
this.firstName = firstName;
this.lastName = lastName;
this.employeeNumber = employeeNumber;
this.isAuthenticated = isAuthenticated;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmployeeNumber() {
return employeeNumber;
}
public void setEmployeeNumber(String employeeNumber) {
this.employeeNumber = employeeNumber;
}
public boolean isAuthenticated() {
return isAuthenticated;
}
public void setIsAuthenticated(boolean authenticated) {
isAuthenticated = authenticated;
}
}
瀏覽器中的結果:

編輯1:
我嘗試添加 @JsonProperty 注釋,現在我得到了兩個屬性:
public class EmployeeState {
private String firstName;
private String lastName;
private String employeeNumber;
@JsonProperty(value = "isAuthenticated")
private boolean isAuthenticated;
public EmployeeState(){
}
public EmployeeState(String firstName, String lastName, String employeeNumber, boolean isAuthenticated) {
this.firstName = firstName;
this.lastName = lastName;
this.employeeNumber = employeeNumber;
this.isAuthenticated = isAuthenticated;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmployeeNumber() {
return employeeNumber;
}
public void setEmployeeNumber(String employeeNumber) {
this.employeeNumber = employeeNumber;
}
public boolean isAuthenticated() {
return isAuthenticated;
}
public void setIsAuthenticated(boolean authenticated) {
isAuthenticated = authenticated;
}
}
現在有兩個屬性:

uj5u.com熱心網友回復:
您的 getter 方法的正確 Java Bean 命名約定是isIsAuthenticated. Jackson 嘗試使用 Java bean 約定,在這種情況下,您的類不符合它。您可以嘗試直接在方法上添加@JsonProperty(value = "isAuthenticated")注釋。isAuthenticated此外,為了防止 JSON 中的任何重復欄位,如果您不需要從 JSON 序列化該欄位,則可以添加@JsonIgnore該欄位。isAuthenticated
為什么你現在在 JSON 中有 2 個欄位的小解釋:
Jackson 從您的isAuthenticated()方法派生的正確屬性名稱是authenticated. 屬性名稱是這樣派生的,因此洗掉了 getter 前綴(is用于布爾方法)并將以下字母轉換為小寫)。這就是您看到 JSON 屬性的原因authenticated。
此外,Jackson 會看到您的isAuthenticated欄位,并為其創建一個 JSON 屬性,然后將其命名為isAuthenticated. 通過在欄位本身上添加@JsonProperty注釋,Jackson 沒有任何變化,因為對于 Jackson,該isAuthenticated()方法與欄位和 setter 方法完全沒有關系,因此它們被視為兩個不同的 JSON 屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/462655.html
