Tag: playframework 2.0

Scala / Play:将JSON解析为Map而不是JsObject

在Play Framework的主页上,他们声称“JSON是一等公民”。 我还没有看到证据。 在我的项目中,我正在处理一些相当复杂的JSON结构。 这只是一个非常简单的例子: { “key1”: { “subkey1”: { “k1”: “value1” “k2”: [ “val1”, “val2” “val3” ] } } “key2”: [ { “j1”: “v1”, “j2”: “v2” }, { “j1”: “x1”, “j2”: “x2” } ] } 现在我明白Play正在使用Jackson来解析JSON。 我在我的Java项目中使用Jackson,我会做这样简单的事情: ObjectMapper mapper = new ObjectMapper(); Map obj = mapper.readValue(jsonString, Map.class); 这样可以很好地将我的JSON解析为Map对象,这就是我想要的 – 字符串和对象的映射,并允许我轻松地将数组转换为ArrayList 。 Scala / Play中的相同示例如下所示: […]

如何在静态上下文中使用generics类和特定对象?

我会尽力解释。 我使用Play Framework 2,我会做很多CRUD操作。 其中一些将是identitcal,所以我想KISS和DRY所以起初我正在考虑一个包含list , details , create , update和delete方法的抽象类,使用generics对象,并通过指定哪个扩展这个类要使用的对象(型号和表格): public abstract class CrudController extends Controller { protected static Model.Finder finder = null; protected static Form form = null; public static Result list() { // some code here } public static Result details(Long id) { // some code here } public static Result create() […]

如何在play-framework 2.0中绑定复杂类型

我有一个以下结构的模型类: public class User { public String name; public Long id; } public class Play { public String name; public User user; } 现在我想要一个基于Play类的表单。 所以我有一个editPlay视图,它将Form[Play]作为输入。 在视图中,我有一个表单,它在提交时调用更新操作: @form (routes.PlayController.update()) {..} 但我找不到以我在控制器中正确接收它的方式绑定用户字段的正确方法: Form formPlay = form(Play.class).bindFromRequest(); Play playObj = formPlay.get(); 根据API , Form.Field值始终是一个字符串。 是否有其他方法可以自动将输入绑定到用户对象? 谢谢

使用Jongo和MongoDB在Jackson反序列化中将ObjectId _id重命名为id

我刚刚开始使用play框架,jongo和MongoDB开发项目。 该项目最初是在Play 2.1中用pojos编写的,其字符串ID字段用以下两个注释:@Id和@ObjectId这将作为ObjectId持久保存到Mongo,并且当反序列化时将id输出为:“id”:“53fcb9ede4b0b18314098d10”例如。 自从升级到Jongo 1.1和Play 2.3.3后,id属性在反序列化时始终命名为“_id”,我希望该属性保留字段名称但我不能使用@JsonProperty(“custom_name”)作为Jongo @Id注释在幕后做@JsonProperty(“_ id”)。 import org.jongo.marshall.jackson.oid.Id; import org.jongo.marshall.jackson.oid.ObjectId; public class PretendPojo { @Id @ObjectId private String id; private String name; public PretendPojo() { } public PretendPojo(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() […]

在子文件夹中找不到视图

我刚开始使用Play2.0框架,我正在尝试在我的home/index模板中使用主模板。 我遇到的问题是,当它在Shared文件夹中找不到“main”时,如果我将它取出并放入Views根目录,那么它可以正常工作。 所以我想知道如何从index.scala.html引用index.scala.html ? 我的文件夹结构如下: 查看 家 index.scala.html 共享 main.scala.html 我在index.scala.html中的代码是: @head = { } @content = { Home Screen!! } ERROR: @main(title = “Home”,head, content) 我得到的错误是: not found: value main.

玩框架2.1 junit测试不能从eclipse工作

我按照zentask教程编写了一个junit测试,测试不会从eclipse IDE运行,它给出了以下exception javax.persistence.PersistenceException: java.lang.IllegalStateException: Class [class play.db.ebean.Model] is enhanced and [class models.User] is not – (you can not mix!!) at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.setEntityBeanClass(BeanDescriptorManager.java:1475) at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createByteCode(BeanDescriptorManager.java:1138) at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1058) at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:565) at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:252) at com.avaje.ebeaninternal.server.core.InternalConfiguration.(InternalConfiguration.java:124) at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:210) at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:64) 我读了一下,发现有些人编辑了buils.scala,在main中添加了以下行:ebeanEnabled:= true 对我来说它没有关闭运行play clean编译的ide 有任何想法吗???

Play框架2.1.3函数将使用给定参数呈现scala模板

我需要一个方法在我的控制器中以这种方式从它收到的参数调用适当的模板: public static Result renderTemplate(String folder, String template) { return ok( views.html.<>.<>.render(Users.createForm) ); } 如果可能的话? 我会用reflection完成它,但由于某种原因我无法列出视图和view.html的字段。 有人可以告诉我为什么,并解释我应该怎么做才能实现这一目标? 谢谢

Play Framework 2.5 JavaAsync抛出CompletionException

我正在使用Play 2.5构建一个简单的应用程序。 为了获得更好的性能,我使用了Akka chunked响应和Java 8 CompletionStage策略。 下面是生成分块响应的代码(不使用ComperableFuture时工作正常): @Singleton public class AbstractSource { public Source getChunked(String html) { return Source.actorRef(256, OverflowStrategy.dropNew()) .mapMaterializedValue(sourceActor -> { sourceActor.tell(ByteString.fromString(html), null); sourceActor.tell(new Status.Success(NotUsed.getInstance()), null); return null; }); } } 这是我的控制器: @Singleton @AddCSRFToken public class Application extends Controller { @Inject private AbstractSource abstractSource; public CompletionStage index() { CompletionStage<Source> source = CompletableFuture.supplyAsync(() -> […]

Java Play! 2 – 使用cookie进行用户管理

我试图通过cookie管理我的用户。 这并不容易,因为绝对没有关于这个主题的文档。 在样本“zentask”的帮助下,我做了这个: session(“username”, filledForm.field(“username”).value()); public class Secured{ public static Session getSession() { return Context.current().session(); } public static String getUsername() { return getSession().get(“username”); } public static boolean isAuthorized() throws Exception { String username = getUsername(); if (username == null) return false; long userCount = DatabaseConnect.getInstance().getDatastore() .createQuery(User.class).field(“username”).equal(username) .countAll(); if (userCount == 1) return true; return false; […]

在play framework 2.0中将文件上传为流

我正在编写一个允许用户上传文件的Play 2.0 java应用程序。 这些文件存储在我使用Java库访问的第三方服务上,我在此API中使用的方法具有以下签名: void store(InputStream stream, String path, String contentType) 我已设法使用以下简单的控制器使上传工作: public static Result uploadFile(String path) { MultipartFormData body = request().body().asMultipartFormData(); FilePart filePart = body.getFile(“files[]”); InputStream is = new FileInputStream(filePart.getFile()) myApi.store(is,path,filePart.getContentType()); return ok(); } 我担心的是这个解决方案效率不高,因为默认情况下,play框架将客户端上传的所有数据存储在服务器上的临时文件中,然后在控制器中调用uploadFile()方法。 在传统的servlet应用程序中,我会编写一个以这种方式运行的servlet: myApi.store(request.getInputStream(), …) 我一直在寻找,没有找到任何解决方案。 我找到的最接近的例子是为什么调用错误或在BodyParser的Iteratee中完成请求在Play Framework 2.0中挂起? 但我没有找到如何修改它以满足我的需要。 在play2中是否有一种方法可以实现这种行为,即客户端上传的数据是否可以将Web应用程序直接“传递”到另一个系统? 谢谢。