Как напечатать описание enum - PullRequest
0 голосов
/ 25 апреля 2020

Я создаю приложение Java, я использовал enum для создания категории mov ie. Когда я ввожу MovieCategory.WAR, я бы хотел видеть War movie(My description) вместо WAR. Как это возможно? Я пытался MovieCategory.WAR.getDescription(), но не работает.

public enum MovieCategory {
   COMEDY("Comedy"), HORROR("Horror"), SCIFI("Sci-Fi"),
   ACTION("Action movie"), ROMANTIC("Romantic"),
   CLASSIC("Classic"), WAR("War movie");

   private final String description;

   MovieCategory(String description) {
       this.description = description;
   }

   public String getDescription() {
       return description;
   }
}
@Service
public class MovieManager {

    private List<Movie> movieList;

    public MovieManager() {
        this.movieList = new ArrayList<>();
        movieList.add(new Movie("City 44",MovieCategory.WAR,"Testing Description",167,12));
    }

    public boolean addMovie(Movie movie){
        return movieList.add(movie);
    }

    public List<Movie> getMovieList() {
        return movieList;
    }

    public void setMovieList(List<Movie> movieList) {
        this.movieList = movieList;
    }
}
@RestController
public class MovieApi {

    private MovieManager movieManager;

    @Autowired
    public MovieApi(MovieManager movieManager) {
        this.movieManager = movieManager;
    }

    @GetMapping("/movies")
    public List<Movie> printMovie(){
        return movieManager.getMovieList();
    }


    @PostMapping("/moreMovies")
    public boolean addMovie(@RequestBody Movie movie){
        return movieManager.addMovie(movie);
    }
}

1 Ответ

1 голос
/ 25 апреля 2020

Перечисление работает правильно:

  public static void main(String[] args) {
    // Displays: Comedy
    System.out.println(COMEDY.getDescription());
    // Displays: COMEDY
    System.out.println(COMEDY);
  }

Или, может быть, вы хотите, чтобы метод toString использовал description?

public enum MovieCategory {
  COMEDY("Comedy");

  private final String description;

  MovieCategory(String description) {
    this.description = description;
  }

  public String getDescription() {
    return description;
  }

  @Override
  public String toString() {
    return getDescription();
  }

  public static void main(String[] args) {
    // Displays: Comedy
    System.out.println(COMEDY.getDescription());
    // Displays: Comedy
    System.out.println(COMEDY);
  }
}

ОБНОВЛЕНИЕ № 3: Кажется, проблема является JSON ответом. Если вы хотите, чтобы описание было возвращено, вы можете аннотировать метод getDescription с @JsonValue.

import com.fasterxml.jackson.annotation.JsonValue;

public enum MovieCategory {
  WAR("War movie");

  private final String description;

  MovieCategory(String description) {
    this.description = description;
  }

  @JsonValue
  public String getDescription() {
    return description;
  }

  @Override
  public String toString() {
    return getDescription();
  }

  public static void main(String[] args) {
    // Displays: Comedy
    System.out.println(WAR.getDescription());
    // Displays: Comedy
    System.out.println(WAR);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...