rest api为GET请求返回空括号

时间:2016-03-18 16:38:34

标签: json rest spring-boot spring-data-jpa

我用Spring Boot实现了Rest api。在我的控制器类中,我有代码来处理GET请求,如果找到记录,它将返回JSON。

// SeqController.java
@Autowired
private SeqService seqService;
@RequestMapping( 
        value = "/api/seqs/{analysis_id}", 
        method = RequestMethod.GET, 
        produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<SeqTb>> getSeqByAnalysisId(@PathVariable("analysis_id") String analysis_id) {
    List<SeqTb> seqs = seqService.findByAnalysisId(analysis_id);
    return new ResponseEntity(seqs, HttpStatus.OK);
}

我还创建了一个bean类SeqServiceBean,它扩展了接口SeqService,后者又调用以下JPA存储库中的方法进行查询。

//SeqRepository.java
@Repository
public interface SeqRepository extends JpaRepository<SeqTb, Integer> {

    @Override
    public List<SeqTb> findAll();

    public List<SeqTb> findByAnalysisId(String analysisId);
}

问题是当我在浏览器中输入网址(http://localhost:8080/api/seqs/fdebfd6e-d046-4192-8b97-ac9f65dc2009)时,它只返回一对空括号。我只是查看了数据库,那个记录确实存在。我做错了什么?

2 个答案:

答案 0 :(得分:1)

回答这个问题有点迟了,但万一其他人有这个问题。 此问题可能是由类(我们希望显示为json对象)缺少getter和/或setter方法引起的。 在你的情况下,&#34; seqTab&#34;上课可能没有吸气剂。 如果没有getter,我们的应用程序就无法提取文件来构建json对象。

示例: 示例用户类 公共类用户{

private String firstname;
private String lasttname;
int age;

public User(){

}

public User(String fname, String lname, int age){
    this.firstname = fname;
    this.lasttname = lname;
    this.age = age;
}

}

样品休息控制器 @RestController

公共类SampleRS {

@RequestMapping(value = {"/sample/{input}"}, method = RequestMethod.GET , produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<User> startService(@PathVariable("input") String input){
     User u = new User(input,"bikila",45);

    return new ResponseEntity<User>(u,HttpStatus.OK);
}

}

//如果我们尝试点击端点/示例{input} ..例如

请求:localhost:8080 / Sample / abebe

回应:
 {}

但是为User类添加getter将解决问题。

使用getter修改的User类

公共类用户{

private String firstname;
private String lasttname;
int age;

public User(){

}

public User(String fname, String lname, int age){
    this.firstname = fname;
    this.lasttname = lname;
    this.age = age;
}

public String getFirstname() {
    return firstname;
}

 public String getLasttname() {
    return lasttname;
}

public int getAge() {
    return age;
}

}

请求:http://localhost:8080/sample/abebe

回复:{&#34;名字&#34;:&#34; abebe&#34;,&#34;姓氏&#34;:&#34; bikila&#34;,&#34;年龄&#34; :45}

希望有所帮助!

答案 1 :(得分:0)

在大多数情况下,数据库驱动程序jar未部署在服务器中。在Eclipse中检查项目的部署组装。另请参阅控制台消息以检查是否显示未找到驱动程序jar。 如果是这种情况,只需在Eclipse的部署程序集中部署此jar。

一件事,如果构建路径在eclipse中具有此jdbc driverjar,则main方法将连接到数据库。但是,如果未部署jar,则jdbc连接将不会通过http请求发生。