мой MessageFieldRepository
package xyz.repository;
import java.util.List;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.CrudRepository;
import xyz.models.MessageField;
public interface MessageFieldRepository extends CrudRepository<MessageField,String> {
@Query(value = "{'messageSchema' : ?0}" )
List<Object[]> findByMessageSchemaId(String messageSchema );
}
И метод класса MssageFieldSchemaService
public JSONObject findByMessageSchema(String messageSchema) throws ParseException{
JSONObject jsonobject = new JSONObject();
List<Object[]> data = messageFieldRepository.findByMessageSchemaId(messageSchema);
JSONArray messageFieldJsonArray = new JSONArray();
JSONObject messageFieldJsonObject = new JSONObject();
try {
for (Object[] alldatastore : data) {
messageFieldJsonObject.put("dataVal", alldatastore[0]);
messageFieldJsonObject.put("messageSchema", alldatastore[1]);
messageFieldJsonObject.put("dataVal", alldatastore[2]);
messageFieldJsonObject.put("messageSchema", alldatastore[3]);
messageFieldJsonObject.put("dataVal", alldatastore[4]);
messageFieldJsonArray.add(messageFieldJsonObject);
}
jsonobject.put("fields", messageFieldJsonArray);
} catch (Exception e) {
System.out.println(e);
}
return jsonobject;
}
это строка, в которой я получаю сообщение об ошибке
for (Object[] alldatastore : data) {
Исключение =>
java.lang.ClassCastException: cubereum.models.MessageField cannot be cast to [Ljava.lang.Object;
может ли кто-нибудь сказать, почему возникает эта ошибка
Вы отлаживали код, чтобы увидеть, что содержится в data, когда вы получаете сообщение об ошибке?
Уже пробовал, но не работает
он содержит два объекта, в которых присутствует несколько значений
Я считаю, что репозиторий должен вернуть ваши экземпляры cubereum.models.MessageField, подумайте о замене List<Object[]> на List<MessageField>




CrudRepository<MessageField,String> вернет List<MessageField>, если вы определите метод интерфейса findByMessageSchemaId(String messageSchema );
Итак, вы пытаетесь преобразовать MessageField в массив Object, который вызывает ошибку. Итак, измените тип возвращаемого значения интерфейса:
List<MessageField> findByMessageSchemaId(String messageSchema);
и цикл:
for (messageField : data) {
// do something with messageField
}
Кроме того, в вашем коде есть несколько логических ошибок:
messageFieldJsonObject.put("dataVal", alldatastore[0]);
messageFieldJsonObject.put("messageSchema", alldatastore[1]);
messageFieldJsonObject.put("dataVal", alldatastore[2]);
messageFieldJsonObject.put("messageSchema", alldatastore[3]);
messageFieldJsonObject.put("dataVal", alldatastore[4]);
Сначала вы сохраняете alldatastore[0] под ключом dataVal, затем перезаписываете его на alldatastore[2], а затем на alldatastore[4].
Под ключом messageSchema вы сохраняете значение alldatastore[1], чтобы перезаписать его двумя строками позже с помощью alldatastore[3]. Итак, в итоге у вас есть JSOObject, содержащий два элемента, из которых вы, вероятно, ожидаете, что их будет 5.
Я изменю весь ключ, который не является проблемой, но когда я использую тип MessageField и его итерацию, тогда это только один объект
что вы получаете из репозитория? Один объект или список с объектами? Пожалуйста, проверьте это на сессии отладчика. Является ли параметр messageSchema уникальным идентификатором?
Вероятно, вам нужно использовать подходящий класс pojo вместо Object. Вставить необработанный (строковый) результат запроса из mongo.