我有一個 Servlet 代碼,我正在運行它來從 MySQL 查詢資料并使用 gson 將其轉換為 json 物件。最終我想在我的反應應用程式中使用 axios 在前端顯示它。不過,我總是遇到 GSON 的問題,而且它永遠無法正確編譯。早些時候它是 2.8 版,所以我升級到 2.9 以消除反射錯誤,但現在我收到了這個錯誤。
com.google.gson.JsonIOException:無法使欄位“java.lang.ref.Reference#referent”可訪問;更改其可見性或為其宣告型別撰寫自定義 TypeAdapter
我的servlet程式代碼:
package org.datafetching;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.sql.*;
import com.google.gson.Gson;
@WebServlet("/fetchdata")
public class FetchData extends HttpServlet {
private static final long serialVersionUID = 1L;
public FetchData() {
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/grey_goose", "", "");
PreparedStatement ps=conn.prepareStatement("select * from table limit 10");
ResultSet rs=ps.executeQuery();
Gson gson = new Gson();
String tablejson = gson.toJson(rs);
PrintWriter printWriter = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
printWriter.print(tablejson);
printWriter.flush();
//printWriter.write(tablejson);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
物件類代碼
package servdemo.registration.model;
public class Employee {
private String firstName;
private String lastName;
private String username;
private String password;
private String address;
private String contact;
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 getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
}
uj5u.com熱心網友回復:
您應該將結果集映射到表示表的物件。例如,如果您有名為 People 的表,并且它具有欄位名稱和年齡。
示例類
public Class People {
private String name;
private Integer age;
... //Getters and Setters here
}
這是映射資料的代碼。
List<People> staffs = new ArrayList<People>();
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
People people = new People(resultSet.getString("name"),
resultSet.getInt("age"));
staffs.add(people);
}
resultSet.close();
preparedStatement.close();
connection.close();
Gson gson = new Gson();
String yourJson = gson.toJson(staffs);
此代碼將映射您的結果集。當然,您需要根據您的表創建物件,因此在稍微更改此代碼后,您應該使其作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/457477.html
