java - 在 java/spring-boot 中,如果找不到项目,返回空 json 对象的最干净方法是什么
问题描述
下面是我的请求处理程序的 Java/spring-boot控制器代码:/api/speaker/123
@GetMapping
@RequestMapping("{id}")
public Speaker get(@PathVariable Long id) {
return speakerRepository.getOne(id);
}
如果id 123
没有找到传入请求/api/speaker/123
,那么如何快速编码以将空对象/json返回给浏览器?在 Nodejs/JavaScript 世界中,我可以简单地在一行以下做。任何这样的干净代码都无需添加if...else
,更多代码要查找null/empty
,然后做更多......然后返回!
return speakerRepository.getOne(id) || {};
编辑:
// Speaker.java
@Entity(name = "speakers")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Speaker {
public Long getSpeaker_id() {
return speaker_id;
}
public void setSpeaker_id(Long speaker_id) {
this.speaker_id = speaker_id;
}
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name;
}
public void setLast_name(String last_name) {
this.last_name = last_name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getSpeaker_bio() {
return speaker_bio;
}
public void setSpeaker_bio(String speaker_bio) {
this.speaker_bio = speaker_bio;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long speaker_id;
private String first_name;
private String last_name;
private String title;
private String company;
private String speaker_bio;
public List<Session> getSessions() {
return sessions;
}
@ManyToMany(mappedBy = "speakers")
@JsonIgnore
private List<Session> sessions;
public Speaker(){
}
}
// SpeakerRepository.java
public interface SpeakerRepository extends JpaRepository<Speaker, Long> {
}
解决方案
@GetMapping
@RequestMapping("{id}")
public Speaker get(@PathVariable Long id) {
return speakerRepository.getOne(id);
}
而是使用以下代码:
@JsonSerialize
public class EmptyJsonResponse {}
@GetMapping
@RequestMapping("{id}")
public ResponseEntity<?> get(@PathVariable Long id) {
Speaker speaker = speakerRepository.getOne(id);
if(speaker != null){
return new ResponseEntity<Speaker>(speaker, HttpStatus.OK)
}else{
return new ResponseEntity<EmptyJsonResponse>(new EmptyJsonResponse(), HttpStatus.OK)
}
}
推荐阅读
- excel - VBA 中缺少属性
- html - ASP.NET Webforms - 显示来自所见即所得编辑器的 HTML 内容,没有来自母版页干扰的引导样式
- java - Java LinkedList 轮询未完成
- knockout.js - 在 KnockOut JS 中根据日期显示数据导致错误的顺序
- javascript - JavaScript:函数未返回最大素数
- docker - docker上的元数据库没有暴露
- c# - label.Text = ComboBox.SelectedText(); 总是为空?
- angular - 同时设置焦点在顶部导航和侧面导航(angular2+)
- python - RuntimeError: OperationalError: (2003, Can't connect to MySQL server on 'IPaddress of the instance'
- java - 如何在 JPQL 中选择随机 10 条记录?