簡體   English   中英

Angular2不會在POST請求中傳遞參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM