小编seb*_*ter的帖子

使用Play Framework和Java解析Json数组

我有以下Json结构:

{
    "name": "John",
    "surname": "Doe",
    "languages": [
    {"language": "english", "level": "3"},
    {"language": "french", "level": "1"}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Play Framework来解析HTTP消息中的Json数据,该消息是使用自行开发的REST服务发送的.我已经知道如何通过查看文档来解析Json数据中的名称和姓氏,这可以通过以下方式完成:

JsonNode json = request().body().asJson();
String name = json.findPath("name").textValue();
String surname = json.findPath("surname").textValue();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,我如何解析Json数据中的数组"语言".我发现了一些关于这个问题的其他帖子,但他们都使用Scala,我无法理解,所以我最好找一个Java解决方案.

我已经尝试了几件事,例如:

    List<JsonNode> languages = json.findPath("languages").getElements();
Run Code Online (Sandbox Code Playgroud)

根据文档,json.findPath()返回一个JsonNode,在其上可以调用函数getElements(),它将返回JsonNode的Iterator.但是我在getElements上遇到编译错误:"JsonNode类型的方法getElements()未定义"

谁知道解析这样一个数组的简单方法?提前致谢

java arrays json jackson playframework

8
推荐指数
1
解决办法
6774
查看次数

使用Java的Play框架中的链承诺

我有一个控制器动作,我需要调用第三方Web服务.

我的问题是我没有打电话给一个网络服务.我需要链接4到5个Web服务.我调用的每个Web服务都返回一个我需要处理的JSON对象,并根据一些逻辑决定调用另一个Web服务(来自4个Web服务)或者向调用者返回响应.这是我想要做的:

 public static Promise<Result> accounts(){
    return WS.url("url1").get().map(response1 -> {
        JsonNode mynode = response1.asJson();

        if (mynode.get("status").asInt()==200){
            Promise<JsonNode> jsonPromise = WS.url("url2").get().map(response2->{
                    return response2.asJson();
            });
        }

        return ok(mynode);
        }); 
}
Run Code Online (Sandbox Code Playgroud)

现在,从文档中,我认为我需要的是链接每个Web服务调用是承诺的承诺.但我不知道该怎么做?

谢谢

java reactive-programming playframework

7
推荐指数
1
解决办法
3303
查看次数

在Test中迭代所有Play Framework路由

有没有办法迭代routes文件中描述的所有服务?需要URL和HTTP方法.

我需要此功能来运行一些集成测试.

我正在使用Play for Java.

java integration-testing routes playframework-2.3

7
推荐指数
1
解决办法
562
查看次数

显示/隐藏片段并以编程方式更改可见性属性

这是一个2部分问题.我所拥有的是一个3 Fragment布局,当用户点击另一个片段中的按钮时,动态添加第3个片段(FragmentC).然后,在添加之后,第3个片段有一个按钮,可以最大化/最小化它.

更新: Scrool最后解决方案



问题1:

我正在尝试更改FrameLayout的visibility属性,该属性充当第3个片段(R.id.fragment_C)的容器.

代码应该做的是生成另一个片段,该片段最初具有包含android:visibility ="gone"的XML.然后,在点击按钮时添加片段,并且可见性将变为可见.

我知道这已经被覆盖过了,但是经过4个小时的努力才能让它发挥作用我决定问我做错了什么.

问题2:

在生成第3个片段后,我有一个最小化/最大化按钮,它应该隐藏前2个片段并允许第3个片段填满屏幕.

问题是使用.setVisibility(View.GONE)时,前两个片段的视图不会被删除.之前已经介绍过,但我无法弄清楚为什么它在我的代码中不起作用.

到目前为止的代码(对不起,如果它是详细的,但我认为最好包括所有细节为你们):

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:orientation="vertical"
    >

    <FrameLayout
        android:id="@+id/fragment_A"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="#CCCCCC" 
        >
    </FrameLayout>

    <FrameLayout
        android:id="@+id/fragment_B"
        android:layout_width="fill_parent"
        android:layout_height="300dp"
        android:layout_below="@id/fragment_A"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp"
        android:background="#B4B4B4"
        >
    </FrameLayout>

    <FrameLayout
        android:id="@+id/fragment_C"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/fragment_B"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="0dp"
        android:background="#A3A3A3"
        android:visibility="gone"
        >
    </FrameLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

土地/ main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:paddingLeft="0dp"
    android:paddingRight="0dp" >

    <LinearLayout
        android:id="@+id/fragments_container"
        android:layout_width="fill_parent"
        android:layout_height="200dp"
        android:baselineAligned="false" >

        <FrameLayout
            android:id="@+id/fragment_A"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" …
Run Code Online (Sandbox Code Playgroud)

visibility android-fragments

6
推荐指数
1
解决办法
3万
查看次数

播放框架控制器方法调用两次

最近我在使用 java play 框架时遇到了一个问题。在路由文件中设置的路由附加到控制器中的方法。

当我查看日志时,我看到控制器中的方法被调用了两次,而只对服务器进行了一次调用以连接到附加路由。

这是框架的问题吗?

路线:

POST /production/publication/success        controllers.Application.importDataAndUpdate()
Run Code Online (Sandbox Code Playgroud)

应用程序.java

Set<String> requestHeader = request().headers().keySet();

Iterator<String> it = requestHeader.iterator();
while (it.hasNext()) {
    Logger.debug(request().getHeader(it.next()));
}
Run Code Online (Sandbox Code Playgroud)

当调用中的有效负载很大时,日志显示应用程序 java 中的方法被调用了两次。为什么会发生这种情况?

java playframework

5
推荐指数
0
解决办法
1089
查看次数

如何通过给定的密钥检索couchdb中的所有文档?

我们的沙发数据库网址是http://10.1.5.88:5984/_utils/database.html?testdata/

我想检索给定密钥的所有文档.我不确定我们是否可以通过在上面的url中传递密钥作为查询参数进行搜索.

请告诉我如何通过浏览器显示查询结果.

例如:获取key ="countryname"的所有文档.

谢谢.

couchdb

4
推荐指数
1
解决办法
5026
查看次数

如何正确地保持JBoss中打开的连接池的数据库连接

我使用JBoss AS 7.1作为服务器,我的DataSource配置了池.我对此很陌生,所以请原谅任何新手的错误...毕竟我在这里学习.

当客户端登录时,它会获得与数据库的连接,我需要保持该连接(从池中)打开,直到用户注销或HttpSession到期.这是来自我们的数据库管理员的绝对要求.谁说他需要DB会话变量.我正在使用servlet来实现这一切.

玩我遇到的两个主要问题:

  1. 据我所知,JBoss会自动关闭未使用的连接=>我打开的连接返回到池中.所以这可能不是正确的道路.

  2. 如果我尝试存储/调用Connection对象,如下所示:

    private Hashtable<String, Connection> connections = new Hashtable<String, Connection>();
    
    try {
        String strDSName1 = "java:/OracleDSJNDI";
        ctx = new InitialContext();
        ds1 = (javax.sql.DataSource) ctx.lookup(strDSName1);
    
        System.out.println("Got 1'st ds.");
    
    } catch (Exception e) {
        System.out.println("ERROR getting 1'st DS : " + e);
    }
    
    connection = ds1.getConnection();
    connections.put(session.getId(), connection);
    
    conn = (Connection) connections.get(sessionID);
    
    Run Code Online (Sandbox Code Playgroud)

    它抛出此异常:

    java.sql.SQLException:Connection与托管connection.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@dee1f37无关



我的问题是:如何正确保持我的连接打开?

谢谢

java jboss datasource connection-pooling

1
推荐指数
1
解决办法
3924
查看次数