Spring Boot 中的 com.mongodb.util.JSONParseException?

Posted

技术标签:

【中文标题】Spring Boot 中的 com.mongodb.util.JSONParseException?【英文标题】:com.mongodb.util.JSONParseException in Spring Boot? 【发布时间】:2018-05-17 17:04:54 【问题描述】:

我尝试使用 @Query 注释创建自定义查询。但它会引发一些错误。

这是我的仓库

package com.springboot.springmongodb.user;
import java.util.List;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;

public interface UserRepository extends CrudRepository<User, String>
    @Override
    User findOne(String id);

    @Transactional(readOnly=false)
    @Query("SELECT user FROM User user WHERE user.username = :username")
    public List<User> findByUsername(@Param("username") String username);


我想为检查用户名创建自定义查询。

这是我得到的错误。

2017-12-04 14:46:10.413 警告 1452 --- [主要] ationConfigEmbeddedWebApplicationContext:遇到异常 在上下文初始化期间 - 取消刷新尝试: org.springframework.beans.factory.BeanCreationException:错误 创建类中定义的名称为“springSecurityFilterChain”的bean 路径资源 [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [javax.servlet.Filter]:工厂方法 'springSecurityFilterChain' 抛出异常;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“userDetailsS​​ervice”的 bean 时出错:不满意 通过字段“userRep”表示的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为“userRepository”的bean:调用init方法 失败的;嵌套异常是 com.mongodb.util.JSONParseException: SELECT user FROM User user WHERE user.username = :username ^

【问题讨论】:

你能告诉我们完整的例外吗? 您似乎将 SQL Query 声明为 mongodb。 mongo 查询应如下所示:@Query(" 'firstname' : ?0 ") 更新了我的完整例外@YCF_L 你会尝试编码格式化吗?换行符肯定不是原创的。 是的,我对 *** 进行了模式更改 【参考方案1】:

异常表明您提供的 @Query 被视为 JSON。看看你的进口,我们会发现原因:

import org.springframework.data.mongodb.repository.Query; 

虽然您的查询 SELECT user FROM User user WHERE user.username = :username 对 JPA (SQL) 有效,但对 MongoDB 无效。更改您的导入以适合您的数据库或更改查询以适合它。

一个有效的 mongoDB 看起来像来自Spring Data MongoDB example:

public interface PersonRepository extends MongoRepository<Person, String>

  @Query(" 'username' : ?0 ")
  List<Person> findByThePersonsFirstname(String firstname);


...以及来自Spring Data JPA example 的有效 JPA 语句:

public interface UserRepository extends JpaRepository<User, Long> 

  @Query("select u from User u where u.username = ?1")
  User findByEmailAddress(String emailAddress);

这需要导入org.springframework.data.jpa.repository.Query

【讨论】:

是的,我已经给出了你提到的同样的导入。 这就是我认为的问题。你的数据库是什么? 这里使用 Crudrepository 接口 绝对是mongodb 您的查询无效。尝试按照我的建议进行更改。

以上是关于Spring Boot 中的 com.mongodb.util.JSONParseException?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理

Spring Boot2 系列教程Spring Boot 中的静态资源配置

内存数据库spring-boot中的h2

使用 Spring Boot Maven 插件时,jar 文件中缺少 Spring Boot 应用程序中的资源

Spring Boot 实践折腾记:Spring Boot中的容器配置和SSL支持

Spring Boot 中的事务同步