Как получить конкретное значение из объекта JSON, например, имя? - PullRequest
0 голосов
/ 05 июня 2019

Я использую Angular в качестве внешнего интерфейса моего приложения. Для бэкэнда я использую Glassfish. В настоящее время я использую глагол HETP GET, чтобы получить объект JSON с идентификатором, именем и адресом. Я хочу получить только имя объекта, как мне это сделать в файле машинописи? Как я могу получить имя нового добавленного объекта остального сервера?

Я хочу получить restaurantName от объекта:

{ restaurantId: 1, restaurantName: 'Mcdonalds', restaurantAdres: 'Kalverstraat 5' },

Код, который получает объект с остального сервера:

   ngOnInit() {
    this.http.get('http://localhost:8080/aquadine-jee/resources/restaurant')
      .subscribe(
        val => {
          const restStr = JSON.stringify(val);
          console.log(restStr);

    );

Код сервера:

@GET

  @Produces("application/json")
  public Response all(){
    List<Restaurant> all = repositoryService.getAllRestaurants();
    return  Response
      .status(200)
      .header("Access-Control-Allow-Origin", "*")
      .entity(all)
      .build();
  }
 public List<Restaurant> getAllRestaurants() {
    EntityManager em = entityManagerFactory.createEntityManager();
    List<Restaurant> restaurants = em.createQuery("SELECT r FROM Restaurant r").getResultList();
    em.close();
    return restaurants;
  }
@Entity
@Table(name = "restaurant")
@NamedQueries({
  @NamedQuery(name = "Restaurant.findOne", query = "select m from Restaurant m where m.id = :id"),
  @NamedQuery(name = "Restaurant.getAll", query = "select m from Restaurant m")
})
public class Restaurant implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;



//    @Column(name="naam")
//    @NotBlank
//    private String naam;

  //    @NotBlank
  String restaurantName;


  //    @NotBlank
  String restaurantAdres;


  int restaurantId;

  public Restaurant(){

  }


  public Restaurant(int restaurantId, String restaurantName, String restaurantAdres) {
    this.restaurantId = restaurantId;
    this.restaurantName = restaurantName;
    this.restaurantAdres = restaurantAdres;
  }

1 Ответ

0 голосов
/ 05 июня 2019

Во-первых, я бы создал класс и, возможно, интерфейс для предоставления вам строго типизированных объектов в вашем TypeScript:

Затем вы можете вернуть объект из запроса get в качестве этого объекта и использовать его так, как хотитенапример, result.restaurantName

Быстрый пример того, как это выглядит (с использованием метода заглушки вместо http) здесь:

Короче говоря:

класс и интерфейс для Angular:

export interface IRestaurant {
   restaurantId: number;
   restaurantName: string;
   restaurantAddres: string;
}

export class Restaurant implements IRestaurant {
    restaurantId:number;
    restaurantName:string;
    restaurantAddres:string;
}

А затем компонент, который получает данные через метод и использует по существу JSON в качестве объекта:

export class AppComponent  {
favoriteRestaurant: IRestaurant;

  retrieve(){
    this.favoriteRestaurant = this.getRestaurant();

    alert(this.favoriteRestaurant.restaurantName);
  }

  getRestaurant():IRestaurant {
    var result: Restaurant = {
       restaurantId: 1, 
       restaurantName: 'Mcdonalds',
       restaurantAddres: 'Kalverstraat 5'
    };

    return result;
  }
}

Создание егоболее полезным для вас, однако, измените метод http.get на что-то вроде этого:

ngOnInit() {
    this.http.get('http://localhost:8080/aquadine-jee/resources/restaurant')
      .subscribe(
        val:IRestaurant => {
          this.favoriteRestaurant = val;
          console.log(restStr.restaurantName);    
    );

Вы не хотите использовать JSON.stringify выше, потому что это дает вам строку!Кроме того, ваш адрес ресторана введен неправильно, они должны точно соответствовать.Поэтому я бы исправил бэкэнд.

...