【问题标题】:Null pointer exception when I use queryDsl Predicate of SpringData使用 SpringData 的 queryDsl 谓词时出现空指针异常
【发布时间】:2016-09-19 09:01:24
【问题描述】:

您好,我正在尝试使用 4 个字段进行搜索,但是当我进行搜索时,其中一些字段可能为空。这就是我选择 queryDsl 的原因。 这是我的 pom.xml

<dependency>
            <groupId>com.mysema.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
        </dependency>

我制作了 ClientPredicate.java

final class ClientPredicates {

    private ClientPredicates() {
    }

    static Predicate firstnameOrLastnameOrCinOrPhoneNberContainsIgnoreCase(String searchTerm) {
        if (searchTerm == null || searchTerm.isEmpty()) {
            return (Predicate) QClient.client.isNotNull();
        } else {
            return (Predicate) QClient.client.firstname.containsIgnoreCase(searchTerm)
                    .or(QClient.client.lastname.containsIgnoreCase(searchTerm)).or
                    (QClient.client.cin.containsIgnoreCase(searchTerm)).or(QClient.client.phoneNber.containsIgnoreCase(searchTerm));
        }
    }

    }

QClient.java

 @Generated("com.mysema.query.codegen.EntitySerializer")
    public class QClient extends EntityPathBase<Client> {

        private static final long serialVersionUID = -797939782L;

        public static final QClient client = new QClient("client");

        public final StringPath createdByUser = createString("createdByUser");

        public final DateTimePath<java.time.ZonedDateTime> creationTime = createDateTime("creationTime", java.time.ZonedDateTime.class);

        public final StringPath firstname = createString("firstname");
        public final StringPath lastname = createString("lastname");
        public final StringPath cin = createString("cin");
        public final StringPath phoneNber = createString("phoneNber");

        public final NumberPath<Long> id = createNumber("id", Long.class);

        public final DateTimePath<java.time.ZonedDateTime> modificationTime = createDateTime("modificationTime", java.time.ZonedDateTime.class);

        public final StringPath modifiedByUser = createString("modifiedByUser");



        public final NumberPath<Long> version = createNumber("version", Long.class);

        public QClient(String variable) {
            super(Client.class, forVariable(variable));
        }

        public QClient(Path<Client> path) {
            super(path.getType(), path.getMetadata());
        }

        public QClient(PathMetadata<?> metadata) {
            super(Client.class, metadata);
        }

    }

在我的控制器中,我有以下代码:

@RequestMapping(value = "/seekClient", method = RequestMethod.POST, headers = "Accept=application/json")
    public @ResponseBody List<Client> seekClient(@RequestBody Client client) {

        Predicate firstnameAndLastnameAndCinAndPhoneNberAre = QClient.client.firstname.eq(client.getFirstname())
                .and(QClient.client.lastname.eq(client.getLastname()));

        System.out.println("*************************** "+firstnameAndLastnameAndCinAndPhoneNberAre);
        List<Client> list = (List<Client>) clientRepository.findAll(firstnameAndLastnameAndCinAndPhoneNberAre);

        return list;

    }

问题是每次我发送一个空字段时,我都会收到一个 nullPointerException。 请提供任何帮助。我被屏蔽已经好几个小时了

【问题讨论】:

    标签: java maven spring-mvc spring-data-jpa querydsl


    【解决方案1】:

    我希望“发送一个空字段”意味着在您的控制器中参数为空。因此访问它的方法将引发异常。在控制器中添加一个空检查,你应该很好。

    【讨论】:

    • 如果我应该添加检查 querydsl 的实用程序是什么,我可以使用检查并进行简单查询??对
    • 重新访问控制器的第一行和第二行。您正在方法参数上调用 getFirstname 和 getLastname 方法。如果为 null,则这是不可能的。
    猜你喜欢
    • 2019-02-06
    • 2021-01-27
    • 2020-03-21
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多