当前位置: 首页 > 知识库问答 >
问题:

Spring Boot REST API给出空行

沈栋
2023-03-14

我刚开始穿春靴。我有一个MYSQL表“Customer”,数据如下所示:表中的数据在使用Postman测试API输出时,似乎有几行空的JSON输出。

package com.semika.customer;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="customer") 
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name="first_name")
    private String firstName;

    @Column(name="last_name")
    private String lastName;

    @Column(name="address")
    private String address;

    public Customer() {
       super();

    }

}
package com.semika.customer;

import org.springframework.data.repository.CrudRepository;

public interface CustomerRepository extends CrudRepository<Customer, Long>{

}
package com.semika.customer;

public interface CustomerService {
    public Iterable<Customer> findAll(); 
}
package com.semika.customer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CustomerServiceImpl implements CustomerService{

    @Autowired
    private CustomerRepository customerRepository;

    public Iterable<Customer> findAll() {
        return customerRepository.findAll(); 
    }
}
package com.semika.customer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CustomerController {
    @Autowired
    private CustomerService  customerService;

    @RequestMapping("/customers") 
    @ResponseBody
    public Iterable<Customer> findAll() {
       Iterable<Customer> customers = customerService.findAll();
       return customers;
    }
}

我不知道我还需要在控制器中修改什么,才能看到带有数据的输出。

共有1个答案

呼延景同
2023-03-14

乍一看,您的代码似乎很好。所以,我复制了你的代码,并尝试运行它,得到了一个空的响应,就像你一样。花了一段时间后,我想出了原因。

Use getter and setter in you customer class and recompile the code.

它会解决你的问题。还可以进行以下更改:

1) Annotate CustomerRepository with @Repository
2) use @EnableJpaRepositories("package path") in your application's main class if your repository is not in the same or sub package.
3) use method type or @GetMapping annotation in your controller.

为方便起见,我正在编写所有修改后的代码:

    package testdemo;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

    @SpringBootApplication
    @EnableJpaRepositories("put repository path here")
    public class TestDemoApplication {

        public static void main(String[] args) {
            SpringApplication.run(TestDemoApplication.class, args);
        }
    }
package testdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class CustomerServiceImpl implements CustomerService{

    @Autowired
    private CustomerRepository customerRepository;

    public Iterable<Customer> findAll() {
        return customerRepository.findAll(); 
    }
}
package testdemo;

public interface CustomerService {
    public Iterable<Customer> findAll(); 
}
package testdemo;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CustomerRepository extends CrudRepository<Customer, Long>{

}
package testdemo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CustomerController {

    @Autowired
    private CustomerService  customerService;

    @GetMapping(value = "/customers") 
     public Iterable<Customer> findAll() {
       Iterable<Customer> customers = customerService.findAll();
       return customers;
    }
}

customer.java

package testdemo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="customer") 
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name="first_name")
    private String firstName;

    @Column(name="last_name")
    private String lastName;

    @Column(name="address")
    private String address;

    public Customer() {
       super();

    }

    public Long getId() {
        return id;
    }

    public void setId(Long 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;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

而且,CrudRepository在findAll()中返回一个可迭代的<>。返回list<>的是JpaRepository,所以不用担心。

 类似资料:
  • 我试图从android应用程序中读取docx文件,但下面的代码给出了 堆栈跟踪是 请帮忙。非常感谢。

  • 我正在使用Powermock为Jersey web服务构建测试用例,并试图模拟数据库函数调用,特别是PUT和POST调用。然而,我在这方面遇到了一些问题。 下面是其中一个web服务调用的样子: 以及我的测试用例当前的样子: 当运行时,这给了我一个断言错误: 意外的方法调用WebService。runUpdateQuery(“exec spInsertApplication,[“测试服务名称”,空,

  • 所以我有java的后端和Angular的前端。当我向我的spring boot restendpoint发送删除请求时,我得到了403代码。Angular发送第一个选项请求,并返回403,因此不会发生删除请求。另外,获取和发布工作正常。 我试过禁用csrf,但没有成功。我也在我的浏览器中使用它,所以我不应该禁用它。在soapUI中,DELETE可以正常工作。 这是我的安全配置类 我想做这个删除请求

  • 问题内容: 我有一个非常简单的应用程序,它只是一个带有选项卡视图的活动。 我已经初始化并将所有内容强制转换为应有的值,但是不断出现空指针错误,该错误始终链接回 tabHost.setup(); 我正在使用android studio,并且是java的新手。这个问题在这里已经问了很多,但所有答案都只是说要包含setup(),而我已经做到了。 这是我的.java文件: 我的代码和一些在线教程之间的唯一

  • 我有以下方法: 租户数据库服务。findTenantById(tenantId)返回可选的: 当为null时,我希望抛出异常。相反,我看到正在抛出: 有什么帮助吗?

  • Mocking resttemplate.exchange()不起作用。restTemplate.exchange()mocking的响应在BDS适配器类中给出null值。我的测试用例由于BDSAdapter类中的空指针异常而失败。(response.getStatusCodeValue()提供空指针异常。.mockito提示) 未使用...->at com..policydetails_adap