2016-09-01 4 views
0

私はPlay Javaの学習を始めています。主題について説明したことを行う方法については、多くの異なるサンプル(多くの場合、輸入品などはありません)が見つかりました。 私はPlay 2.5とJDK 8を使用しており、独自のコントローラを設定しています。このファイルは、コントローラのJavaクラスからアクセスできるディレクトリにありますが、JSONファイルを読み取るベストプラクティスは何ですか:Jackson経由ですか?またはjava.io. *関数? 作業中の最小サンプルを専門家から入手することは可能ですか? (サンプルコードでは、どちらもdoes'tない最終カンマを持っている!)私は、このガイド以下しようとしたが、コードはエラーに常に行く: https://www.playframework.com/documentation/2.5.x/JavaJsonActionsPlay Java、ローカルJSONファイルを読み込み、本文としてリストとして表示する方法は?

基本的に私のJSON items.jsonが..workspace \プレー-javaの下にある\ app \ data \ items.jsonにあります。 [ { "ID":10000000、 "名前": "NAME1"、 "STARTTIME":「2015-06-18T06:26:56から07:

JSONファイルには、このようなものです00" 、 『終了時刻』: 『2015-07-08T12:47:16から07:00』 }など ]

と私は関数の中で、私が指定する必要があるファイルを読み取ることが推測パス 'app/data/items.json'または 'data/items.json'

ありがとうございます!

+0

ます。http ://www.lightbend.com/activator/templates –

+0

@Mickyもっと具体的な例を挙げることができますか? "conf/myfile.jsonにファイルがあり、****にしたいものをロードしたい****" – Salem

+0

確かに@Salem、質問を編集するつもりです。 – Micky

答えて

3

クライアントにJSONを配信する場合は、Jsonクラスを使用して入力ストリーム(または文字列)をJsonNodeに変換し、それを直接応答に戻すことができます。 JsonNodeを使用しているため、応答のコンテンツタイプが自動的に設定されます。

(この例では、私はfoo.jsonと呼ばれる/confでファイルを作成した。)

package controllers; 

import java.io.IOException; 
import java.io.InputStream; 
import javax.inject.Inject; 
import com.fasterxml.jackson.databind.JsonNode; 
import play.Environment; 
import play.libs.Json; 
import play.mvc.Controller; 
import play.mvc.Result; 

public class SomeController extends Controller { 

    private final Environment env; 

    @Inject 
    public SomeController(final Environment env) { 
     // the environment is used to access local files 
     this.env = env; 
    } 

    public Result index() { 
     try (InputStream is = env.resourceAsStream("/foo.json")) { 
      final JsonNode json = Json.parse(is); 
      return ok(json); 
     } catch (IOException e) { 
      return internalServerError("Something went wrong"); 
     } 
    } 
} 
+0

こんにちは@スティーブ、おかげさまで助けてくれてありがとう!しかし、私はこのエラーが発生しています:実行例外 [CompletionException:java.lang.RuntimeException:com.fasterxml.jackson.databind.JsonMappingException:[入力:UNKNOWN;で終了の入力のためにマップするコンテンツがありません ; 1行目:0]] – Micky

+0

行1、列0は、JSONファイルが空であるかのように聞こえる、または見つからない可能性があります。 'conf /'に 'foo.json'という名前のファイルを作成しました。これは' {"foo": "bar"} 'というものです。 –

+0

はい、スティーブ間違いなく最高のソリューション..試して、それは働いた。私はパスのルートポイントとしてconfについて知らなかった、私はそこに私のデータフォルダを移動し、それは非常にうまく動作します。どうもありがとう!!!! – Micky

1

私は、この基本的なコードを自分で解決:あなたはこれらのサンプルをチェックアウトする場合があります

package controllers; 

import com.fasterxml.jackson.databind.JsonNode; 
import play.Environment; 
import play.libs.Json; 
import play.mvc.Controller; 
import play.mvc.Result; 

import javax.inject.Inject; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 


public class CustomersController extends Controller { 


    private final Environment env; 

    @Inject 
    public CustomersController(final Environment env) { 
     // the environment is used to access local files 
     this.env = env; 
    } 

    public Result index() { 
     File file = new File("absolute path/items.json"); 

     try (
       FileInputStream is =new FileInputStream(file); 
     ){ 
      final JsonNode json = Json.parse(is); 
      return ok(json); 
     } catch(IOException e){ 
      return internalServerError("Something went wrong"); 
     } 
    } 
} 
関連する問題