当前位置: 首页 > 知识库问答 >
问题:

用Spring从角形中恢复数据

侯焱
2023-03-14

我尝试用Spring将Angular表单发送的数据恢复到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"}
   }
}
@RequestMapping("/myURL")
    public void myController(@RequestBody  Form form) {
        System.out.println(form );
     }

我还有三个bean,Form、Object1和Object2,每个bean都有一个空的contructor和共同响应的getter和setter。

今天,我在myController中输入object表单不是null,但它的两个字段(object1和object2)是null。所以,我猜Spring不明白它需要将数据表单转换为这两个对象。

编辑:

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 + "]";
    }
}

编辑2:这是我的build.gradle文件:

buildscript {
	ext {
		springBootVersion = '2.0.0.BUILD-SNAPSHOT'
	}
	repositories {
		mavenCentral()
		maven { url "https://repo.spring.io/snapshot" }
		maven { url "https://repo.spring.io/milestone" }
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
// apply plugin: 'war'

jar {
	baseName = 'my-project'
	version = '0.0.1-SNAPSHOT'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
	mavenCentral()
	maven { url "https://repo.spring.io/snapshot" }
	maven { url "https://repo.spring.io/milestone" }
}

configurations {
	providedRuntime
}

bootRun {
    // static classpath resources (i.e. in src/main/resources by default) are
    // reloadable in the live application
	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")


	compileOnly('org.projectlombok:lombok')

    testCompile("junit:junit")

	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与此完全相同,只需更改数字即可。我检查了两次,在Form、Object1和Object2字段的名称与Angular返回的formData中的名称之间没有键入错误或差异。

我在重写我用Java恢复的JSON时犯了一个错误:有一种叫做“数据”的“超级对象”,它包含Object1和Object2。难道这不是问题所在吗?

共有1个答案

郎弘业
2023-03-14

你的表单课是期末课。我认为您使用Jackson使用setters创建反序列化Out objet表单。由于它是最终的,Jackson不能使用设置器来设置ObjetCT1和Object2。它们是空的

编辑:不要设置beans的韵母

编辑2:

.post("/myURL", this.formData)
 类似资料:
  • 我正在使用Azure数据块,并在ADLS Gen2上创建了一个delta表。 我已经创建了4个版本的三角洲湖。 我试图用下面的命令恢复到版本2。 有人能告诉我为什么我不能恢复到旧版本吗?现在发生如下错误。

  • 我写了一个Android应用。导出为签名APK发送通过邮件安装到设备。-不在市场。 在运行时,它将用类似的代码将他们的数据保存到内部存储: 据我所知-如果我错了,请纠正我-它将保存到/data/data/com。我的公司。myapp/文件名 因为它是用保存的,所以我不确定市场上或我的其他应用程序是否能看到它保存它。也许如果我创建一个具有相同签名的应用程序? 手机没有根。我已经尝试了很多备份,应用程

  • 如问题标题所示,很明显我想从ibdata1文件中恢复数据。我在ubuntu系统中安装了mysql,损坏了大约189GB的数据库。现在数据库将无法启动,并触发数百万innodb日志序列号错误。 误差 我会非常感谢你的帮助。

  • 正如名字一样,这个(recover)内建函数被用于从 panic 或 错误场景中恢复:让程序可以从 panicking 重新获得控制权,停止终止过程进而恢复正常执行。 recover 只能在 defer 修饰的函数(参见 6.4 节)中使用:用于取得 panic 调用中传递过来的错误值,如果是正常执行,调用 recover 会返回 nil,且没有其它效果。 总结:panic 会导致栈被展开直到 d

  • 我们定期备份我们的集群,并且每天在aws s3上存储模式和快照备份。 不知何故,我们丢失了所有数据,在从备份中恢复数据时,我们能够恢复模式,但在将快照文件复制到/var/lib/cassandra/data目录时,它没有在表中显示数据。 复制数据后,我们已经完成了nodetool刷新- keyspace表,但仍然没有工作。 你能帮忙吗?

  • 问题内容: 我在应用程序的状态栏中有一条通知: 这样做的问题是,当您从应用程序中按下主页按钮(将其推到后台)然后在从状态栏访问的列表中的通知上按下时,它将启动活动的新副本。我要做的就是恢复应用程序(例如,长按主屏幕按钮并按应用程序图标上的)。有没有一种创建意图的方法? 问题答案: 我已通过将我的活动更改为androidManifest.xml文件来解决了此问题。 此属性的默认值为,它允许运行任意数