使用 laggom 创建一个简单的模拟 json 服务

Creating a simple mock json service with laggom

Lagom 似乎很有趣,但我很难把事情做简单。好像没看懂它是怎么工作的,还有hello world的例子,虽然能用,但是不明白怎么用

我正在尝试创建一个简单的 restful 服务,该服务接受其 header 两个参数并生成 json object。例如在 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","");
            myBook.put("status","available");

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

然后我如何输入headers参数?一些解释基础知识的文档会非常有帮助。

提前致谢

您需要创建一个实际执行 JSON 的 POJO class。通过在服务实现中使用 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);
        };
    }
}