[英]Angular2 does not pass parameters in POST request
我正在嘗試使用Angular POST請求將參數傳遞給Tomcat服務器Spring Framework。 我以某種方式看到參數在發送時在那里,但是以某種方式沒有到達/在后端正確檢索。 這是Angular2代碼:
addCompany() {
console.log("addCompany button clicked!");
console.log("company name: " + this.input);
let nameId = this.input;
let body = JSON.stringify({ input: nameId });
let headers = new Headers({ 'Content-Type': 'application/json', 'X-CSRF-TOKEN':this.getToken() });
console.log("csrf token: " + this.getToken());
let options = new RequestOptions({ headers: headers });
this.http.post('http://localhost:8080/views/addcompany', body, options).toPromise()
.then(() => {
console.log("company added!");
this.reloadList();
});;
}
當我嘗試在Spring中獲取它時,該參數的null
:
@RequestMapping(value = "/addcompany", method = RequestMethod.POST)
@ResponseBody
public void addCompany(HttpServletRequest request,
HttpServletResponse response) {
String nameId = request.getParameter("input");
eventService.addCompany(nameId);
}
我也這樣嘗試過:
@RequestMapping(value = "/addcompany", method = RequestMethod.POST)
@ResponseBody
public void addCompany(Model model, @RequestParam("input") String nameId) {
eventService.addCompany(nameId);
}
在Angular代碼中,我一直在嘗試在各處更改逗號,例如:
let nameId = this.input;
let body = JSON.stringify({ 'input': nameId });
等等
我嘗試了這個: Angular2-Http POST請求參數
按照建議JB Nizet
我嘗試創建POJO
:
public class Company {
public String input;
public Company() {
this.input = "";
}
public String getInput() {
return this.input;
}
public void setInput(String input) {
this.input = input;
}
}
將其注冊到我的@Configuration
文件中:
@Bean
public Company getCompany(){
return new Company();
}
並將請求方法更改為以下內容:
@RequestMapping(value = "/addcompany", method = RequestMethod.POST)
@ResponseBody
public void addCompany(Company company) {
eventService.addCompany(company.input);
}
之后,我使用input=null
在方法中獲取Company
對象。
然后,我嘗試從@Configuration
注銷Company
@Bean
,並將請求方法更改為以下內容:
@RequestMapping(value = "/addcompany", method = RequestMethod.POST)
@ResponseBody
public void addCompany(@RequestBody Company company) {
eventService.addCompany(company.input);
}
但是之后,我收到415 (Unsupported Media Type)
錯誤。
在pom.xml
我具有以下jackson導入:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.10</version>
</dependency>
將其替換為第二個傑克遜版本可以解決此問題:
<properties>
...
<jackson.version>2.7.5</jackson.version>
</properties>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
您正在將一個JSON對象作為主體發送,並且希望獲得一個包含此JSON對象屬性的請求參數。
那不會發生。 您需要一個與發送的JSON結構匹配的POJO,以該POJO作為參數並使用@RequestBody
對其進行注釋。 Jackson會將JSON解組到POJO,然后POJO將傳遞給您的方法。
如果請求包含application / x-www-form-urlencoded負載,則可以使用請求參數:您在提交HTML表單時不執行任何JavaScript便發送的負載類型。
代替let body = JSON.stringify({ input: nameId });
嘗試let body = { input: nameId };
嘗試使用:
let body:string='input='+nameId;
並使用此標題
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded', 'X-CSRF-TOKEN':this.getToken() });
如果您要發送多個參數,則僅適用於其他閱讀器。 使用來回分離參數。 像下面的代碼
let body :string='username='+username+'&password='+password;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.