我试图运行这个简单的弹簧启动 - elasticsearch应用程序,但我得到这个 错误的:当我GET /本地主机:8080 /的findAll:
{
"timestamp": 1549021796136,
"status": 500,
"error": "Internal Server Error",
"exception": "org.springframework.http.converter.HttpMessageNotWritableException",
"message": "Could not write JSON: (was java.lang.NullPointerException); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl[\"facets\"])",
"path": "/findAll"}
我有非常简单的类和接口:
Customer.java
package com.example.demogradleNew.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Document(indexName = "christouandr", type = "customer", shards = 2)
public class Customer {
@Id
private String id;
private String firstName;
private String lastName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
CustomerRepository.java
@Repository
public interface CustomerRepository extends ElasticsearchRepository<Customer, String> {
List<Customer> findByFirstName(String firstName);
}
和 DemogradleNewApplication.java
package com.example.demogradleNew;
import com.example.demogradleNew.model.Customer;
import com.example.demogradleNew.repository.CustomerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@SpringBootApplication
@RestController
public class DemogradleNewApplication {
@Autowired
private CustomerRepository repository;
@GetMapping("/findAll")
public Iterable<Customer> findAllCustomers() {
return repository.findAll();
}
@GetMapping("/findByName/{firstName}")
public List<Customer> findByName(@PathVariable String firstName){
return repository.findByFirstName(firstName);
}
@PostMapping("/saveCustomer")
public int saveCustomer(@RequestBody List<Customer> customers){
repository.save(customers);
return customers.size();
}
public static void main(String[] args) {
SpringApplication.run(DemogradleNewApplication.class, args);
}
}
我的的build.gradle 文件如下:
buildscript {
ext {
springBootVersion = '1.5.19.BUILD-SNAPSHOT'
}
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/snapshot' }
maven { url 'https://repo.spring.io/milestone' }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'eclipse'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/snapshot' }
maven { url 'https://repo.spring.io/milestone' }
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'org.springframework.boot:spring-boot-devtools'
compileOnly 'org.projectlombok:lombok'
}
我什么都试过,这个帖子里说的,但我仍然得到同样的错误。当我使用Maven时,我的代码可以完美运行。但是,当我使用Gradle时,会出现此错误。 我一直在寻找了几个小时来解决这个问题,但我还没有找到答案。谢谢!
答案 0 :(得分:0)
好的,我找到了答案! 令人惊讶的是,将其添加到 DemogradleNewApplication.java 解决了该问题!
import com.google.common.collect.Lists;
public List<Customer> findAll() {
return Lists.newArrayList(repository.findAll());
}
所以,最后的 DemogradleNewApplication.java 文件,它的工作原理是以下!
package com.example.demogradleNew;
import com.example.demogradleNew.model.Customer;
import com.example.demogradleNew.repository.CustomerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import com.google.common.collect.Lists;
@SpringBootApplication
@RestController
public class DemogradleNewApplication {
@Autowired
private CustomerRepository repository;
@GetMapping("/findAll")
public List<Customer> findAll() {
return Lists.newArrayList(repository.findAll());
}
@GetMapping("/findByName/{firstName}")
public List<Customer> findByName(@PathVariable String firstName){
return repository.findByFirstName(firstName);
}
@PostMapping("/saveCustomer")
public int saveCustomer(@RequestBody List<Customer> customers){
repository.save(customers);
return customers.size();
}
public static void main(String[] args) {
SpringApplication.run(DemogradleNewApplication.class, args);
}
}