У меня возникают две проблемы:java.lang.IllegalStateException: Это не JSON массив
1) java.lang.IllegalStateException: Это не JSON массив
это я получаю при попытке конвертировать список в JSON. Также PLZ скажите мне, как обращаться с нулевым массивом в json.
2) Когда я запускаю запрос в базе данных, он получает мне 5 результатов. Когда я отлаживаю OperatorDetailsDao.java, я получаю rs.next() для запуска только один раз. И еще одна проблема заключается в том, что я получаю нулевой результат в operatorList, хотя это массив операторов.
Пожалуйста, помогите разобраться с проблемой, застрял в течение двух дней.
Контроллер класса
public class SearchController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
try {
String term = request.getParameter("terms");
System.out.println("Data from ajax call " + term);
OperatorDetialsDao details = new OperatorDetialsDao();
List<OperatorDetailsBean> operatorList = details.getOperators(term);
System.out.println("Operator List " + operatorList);
JsonElement element = new Gson().toJsonTree(operatorList);
System.out.println(element);
JsonArray jsonArray = element.getAsJsonArray();
response.getWriter().print(jsonArray);
response.getWriter().flush();
} catch (Exception e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
OperatorDetailsDao -> getOperators()
public List<OperatorDetailsBean> getOperators(String name) {
PreparedStatement ps = null;
List<OperatorDetailsBean> operatorList = new ArrayList();
operatorList = null;
name = name.toUpperCase();
String data;
try {
ps = connection.prepareStatement("SELECT * FROM operator_details_m WHERE upper(name) LIKE ?");
ps.setString(1, name + '%');
ResultSet rs = ps.executeQuery();
while (rs.next()) {
uname = rs.getString("NAME");
token = rs.getString("TOKEN_NO");
OperatorDetailsBean op = new OperatorDetailsBean();
op.setName(uname);
op.setTokenNo(token);
operatorList.add(op);
}
} catch (Exception e) {
//System.out.println(e.getMessage());
}
return operatorList;
}
OperatorDetailsBean является класс компонента с геттер и наладчиков.
Возможно ли предоставить вам фрагмент содержимого JSON? Что касается цикла базы данных, похоже, вы сталкиваетесь с исключением aNull pinter, поскольку вы установили оператор operatorList равным null после его инициализации в строке выше - но вы глотаете его в catch (Exception e) {}. Вам нужно просто удалить оператор инициализации, который говорит operatorList = null –
Прежде всего, форматирование кода не помогает. Кроме этого, попробуйте опубликовать строку JSON. Если он начинается с '[', то это массив, если он начинается с '{' его объекта. – shyam
@PrahaladDeshpande, я хочу создать JSON для использования в ajax, я написал код для создания json в файле контроллера. Но operatorList возвращает null, поэтому я не могу предоставить фрагмент json. Список arrayList (operatorList) содержит массив операторов, имеющих поля «имя» и «токен», которые являются String. –