私は見つけることができるすべてについて何かを読んだのですが、何らかの理由でこの作業をどうやって行うかについて私の頭脳を包み込むことはできません。 2日間、既存のプロジェクトで苦労した後、私はメインフォルダ内のリソースフォルダを作成し、以下でapplication.propertiesと呼ばれるファイルを追加Spring.io@Valueアノテーションを使用したSpringブートapplication.propertiesへのアクセス
https://spring.io/guides/gs/rest-service/
から残りのコンテンツはじめにダウンロード次のよう
my.setting = HELLOTHERE
Iは、次いで、グリーティングクラス修飾:
package hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Component
public class Greeting {
private long id;
private String content;
private String dooDad;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public Greeting() {
// TODO Auto-generated constructor stub
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
public String getDooDad() {
return dooDad;
}
@Autowired
public void setDooDad(@Value("${my.setting}")String dooDad) {
this.dooDad = dooDad;
}
}
私はAPPL修飾しました
package hello;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
私は、アプリケーションを実行し、出力を見てみると:私はGreetingControllerクラスを変更しなかったが、完全を期すために、それが含まれます
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
@SpringBootApplication
@Configuration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
を次のように@Configurationアノテーションを持っているicationクラス私はdooDadの値を見ることを期待しましたが、それは常にnullです。
{"id":1,"content":"Hello, mike!","dooDad":null}
これを理解するための助けがあれば幸いです。私は@ValueアノテーションをApplicationクラスの変数に置くと、Greetingクラスに入っているときではなく、その変数に正しい値が設定されることを発見しましたか?
これはこの特定のケースでは理にかなっていますが、JSONを入力として受け入れるエンドポイントにデフォルト値を設定できるようにしたいと考えています。JSONは、この例ではオブジェクト全体を必ずしも含んでいるとは限りません。 '{" id ":0、" content ":" foo "}' '@Valueを使ってdooDadの値を設定するだけです'。エンドポイントでdooDadの値をテストし、nullの場合は '@ Value'に設定する必要がありますが、あなたが何を言っているのか理解していればいいですか?別の方法はありませんか? –
@MichaelHatch絶対に。このシナリオでは、RequestMethodをPOSTに変更し、RequestParamのデフォルト値を設定します(これはnameパラメータで行ったとおりです)。これは最もクリーンなアプローチです。 dooDadの値が送信されない場合、デフォルト値が使用されます。ここで、プロパティファイル内からこのデフォルト値を設定しようとしているなら、もう少し詳しく説明しますが、それを行うことができます。詳細については、私のサンプルレポを参照してください。https://github.com/kanderson450/stackoverflow-q40271433マスターブランチは簡単なアプローチですが、特性ブランチでプロパティファイルのアプローチをチェックしてください。 –