【发布时间】:2016-11-05 05:20:27
【问题描述】:
我正在尝试使用 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 request parameters
按照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 我有以下杰克逊进口:
<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>
【问题讨论】:
标签: spring spring-security angular