Создание простого сервиса mock для json с laggom - PullRequest
0 голосов
/ 18 апреля 2019

Лагом кажется интересным, но мне трудно сделать что-то простое.Кажется, я не понял, как это работает, и пример «Привет, мир!», Хотя он работает, я не понимаю, как его использовать.

Я пытаюсь создать простой сервис отдыха, который принимаетего заголовок имеет два параметра и создает объект json.Например, в MyService.java у меня есть:

public interface BookService extends Service {

    ServiceCall<NotUsed, String> getAllBook();

    /**
     * @return
     */
    @Override
    default Descriptor descriptor() {

        return named("book").withCalls(
            restCall(GET, "/api/get-all-book", this::getAllBook)
        ).withAutoAcl(true);
    }
}

Затем в BookServiceImpl у меня есть:

public class BookServiceImpl implements BookService {

    private final PersistentEntityRegistry persistentEntityRegistry;

    /**
     * @param registry
     * @param readSide
     * @param session
     */
    @Inject
    public BookServiceImpl(final PersistentEntityRegistry registry, ReadSide readSide, CassandraSession session) {
        this.persistentEntityRegistry = registry;

        persistentEntityRegistry.register(BookEntity.class);
        readSide.register(BookEventProcessor.class);
    }


    @Override
    public ServiceCall<NotUsed, String> getAllBook() {
        return request -> {

            JSONObject myBook= new JSONObject();
            myBook.put("name","BookName");
            myBook.put("description","A description");
            myBook.put("price","$16");
            myBook.put("status","available");

            //how do I return JSONBject.toString()
        };
    }
}

И как мне поместить параметры заголовков?Некоторая документация, которая объясняет основы, была бы очень полезна.

Заранее спасибо

1 Ответ

0 голосов
/ 23 апреля 2019

Вам нужно создать класс POJO, который на самом деле выполняет JSON. При использовании пакета lombok в реализации сервиса:

package mybook;


import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Value;

import javax.annotation.concurrent.Immutable;

@Value
@Builder
@Immutable
@JsonDeserialize
@AllArgsConstructor
public class Book {
    String name; 
    String description; 
    String value; 
    String status;
}

Тогда на вооружении:

public interface BookService extends Service {

    ServiceCall<NotUsed, Book> getAllBook();

    /**
     * @return
     */
    @Override
    default Descriptor descriptor() {

        return named("book").withCalls(
            restCall(GET, "/api/get-all-book", this::getAllBook)
        ).withAutoAcl(true);
    }
}

А затем в реализации:

public class BookServiceImpl implements BookService {

    @Override
    public ServiceCall<NotUsed, Book> getAllBook() {
        return request -> {
            Book myBook =     Book.builder().
                                name("BookName").
                                description("A description").
                                price("16€").
                                status("available").build();

            return completedFuture(myBook);
        };
    }
}
...