В java / spring-boot какой самый чистый способ вернуть пустой объект json, если элемент не найден - PullRequest
0 голосов
/ 02 февраля 2020

Ниже указан мой 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> {       
}

1 Ответ

0 голосов
/ 03 февраля 2020
@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)
   }         
}
...