Nas*_*din 1 rest json spring-data-jpa spring-boot
我用 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);
}
Run Code Online (Sandbox Code Playgroud)
我还创建了一个SeqServiceBean扩展接口的 bean 类SeqService,该接口又调用以下 JPA 存储库中的方法进行查询。
//SeqRepository.java
@Repository
public interface SeqRepository extends JpaRepository<SeqTb, Integer> {
@Override
public List<SeqTb> findAll();
public List<SeqTb> findByAnalysisId(String analysisId);
}
Run Code Online (Sandbox Code Playgroud)
问题是当我在浏览器中输入网址(http://localhost:8080/api/seqs/fdebfd6e-d046-4192-8b97-ac9f65dc2009)时,它只返回一对空括号。我刚刚查了一下数据库,确实有这条记录。我做错了什么?
回答这个问题有点晚了,但以防万一其他人也遇到这个问题。这个问题可能是由于类(我们希望显示为 json 对象)缺少 getter 和/或 setter 方法引起的。在您的情况下,“seqTab”类可能没有吸气剂。如果没有 getter,我们的应用程序就无法提取字段来构建 json 对象。
示例:示例用户类 public class 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;
}
Run Code Online (Sandbox Code Playgroud)
}
示例休息控制器@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);
}
Run Code Online (Sandbox Code Playgroud)
}
// 如果我们尝试到达端点 /sample{input} .. 例如
请求:本地主机: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;
}
Run Code Online (Sandbox Code Playgroud)
}
请求: http://localhost:8080/sample/abebe
响应:{“firstname”:“abebe”,“lasttname”:“bikila”,“age”:45}
希望有帮助!
| 归档时间: |
|
| 查看次数: |
7816 次 |
| 最近记录: |