使用 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);
};
}
}
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);
};
}
}