我的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) {
Exception =>
java.lang.ClassCastException: cubereum.models.MessageField cannot be cast to [Ljava.lang.Object;
任何人都能说出此错误的原因
答案 0 :(得分:0)
如果您定义接口方法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个元素。