数日から問題があります。私はそれが非常に基本的だと確信していますが、私は解決策を見つけることができません。Springで角型データを復元する
私は、Angular形式で送信されたデータをSpringでJavaメソッドに復元しようとしています。
App.js
myController.prototype = {
processForm : function processForm() {
alert('foo!');
},
retrieveUrl : function retrieveUrl() {
this.url.$ready = false;
return this.http
.post("/myURL", {data : this.formData})
.then(function(response) {
// do something
}.bind(this), function(error) {
// do something else
}.bind(this));
}
};
FORMDATAの値::私のコードは次のようである
{data :
{"object1":
{"prop1":"q",
"prop2":"w"},
"object2":
{"prop3":"e",
"prop4":"r"}
}
}
そして、私のJavaコード:
@RequestMapping("/myURL")
public void myController(@RequestBody Form form) {
System.out.println(form);
}
今日、myControllerに入力しましたが、オブジェクトフォームはnullではなく、2つのフィールド(object1とobject2)がnullです。だから、私は、Springがデータフォームをこれらの2つのオブジェクトに変換する必要があることを理解していないと思います。
EDIT:
トーマス・ピエール>ここに私のフォームBeanのコードがある
public class Form {
public Object1 object1;
public Object2 object2;
public Form(){}
public Object1 getObject1() {
return object1;
}
public void setObject1(Object1 object1) {
this.object1 = object1;
}
public Object2 getObject2() {
return object2;
}
public void setObject2(Object2 object2) {
this.object2 = object2;
}
@Override
public String toString(){
return "BankForm [debitor = " + debtor +", bank = " + bank + "]";
}
}
缶私たちはSpringアノテーションを使って自動的に逆シリアル化を行いませんか?
EDIT 2:ここでは は私のbuild.gradleファイルです:
buildscript {
\t ext {
\t \t springBootVersion = '2.0.0.BUILD-SNAPSHOT'
\t }
\t repositories {
\t \t mavenCentral()
\t \t maven { url "https://repo.spring.io/snapshot" }
\t \t maven { url "https://repo.spring.io/milestone" }
\t }
\t dependencies {
\t \t classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
\t }
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
// apply plugin: 'war'
jar {
\t baseName = 'my-project'
\t version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
\t mavenCentral()
\t maven { url "https://repo.spring.io/snapshot" }
\t maven { url "https://repo.spring.io/milestone" }
}
configurations {
\t providedRuntime
}
bootRun {
// static classpath resources (i.e. in src/main/resources by default) are
// reloadable in the live application
\t addResources = true
}
dependencies {
compile group: 'com.google.code.gson', name: 'gson', version: '1.7.2'
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: "spring-boot-starter-tomcat"
}
compile("org.springframework.boot:spring-boot-starter-jetty")
providedRuntime("org.springframework.boot:spring-boot-starter-jetty")
\t compileOnly('org.projectlombok:lombok')
testCompile("junit:junit")
\t testCompile('org.springframework.boot:spring-boot-starter-test')
}
Object1.java:
public class Object1 {
public String prop1;
public String prop2;
public Object1(){}
public void setProp1(String prop1) {
this.prop1 = prop1;
}
public String getProp1() {
return prop1;
}
public void setProp2(String prop2) {
this.prop2 = prop2;
}
public String getProp2() {
return prop2;
}
}
Object2.javaはまったく同じです。番号を変更するだけです。フォームの名前、Object1とObject2のフィールド名、およびAngularで返されるformDataの名前の間にタイプミスや差異がないことを2回確認しました。
JavaでリカバリするJSONを書き直して間違えました。Object1とObject2を含む「データ」という種類の「スーパーオブジェクト」があります。これは問題ではありませんか?
は、JSON(メソッドからインスタンスを戻すと方法@ResponseBodyを追加)として人口フォームインスタンスを返すコントローラメソッドを追加します。投稿しているJSONは、この呼び出しによって返されるものと同じ形式である必要があります。 –