我正在尝试将来自角度4代码的http发布数据发送到struts动作。正在调用Struts操作,但无法接收数据。给我一个错误,例如“ java.lang.ClassCastException:java.lang.Integer无法转换为java.lang.String”
建议将有很大帮助
import { Component, OnInit } from '@angular/core'; import { Http, Headers, RequestOptions } from '@angular/http'; import 'rxjs/add/operator/toPromise'; import { Observable } from 'rxjs/Observable'; @Component({ selector: 'app-root', template: '<h1>Dukes</h1>', // templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit { title = 'here beta'; dukes = [{ name: "offline", age: 2 }]; data = { title: 'foo', body: 'bar', userId: 1 }; headers: Headers = new Headers({ 'Content-Type': 'application/json' }); options: RequestOptions = new RequestOptions({ headers: this.headers }); constructor(private http: Http) { } ngOnInit() { let options = new RequestOptions(); options.headers = new Headers(); options.headers.append('Content-Type', 'application/json'); const req = this.http.post('http://localhost:8080/SampleProject/getTutorial', this.data, options) .subscribe( res => { console.log(res); }, err => { console.log("Error occured"); } );
支柱行动课是
public class SampleAction { private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } public int execute() { try{ actorSeqID = 3; System.out.println(data+"--"); }catch(Exception e){ e.printStackTrace(); } return "success"; }
如果要以data字符串形式获取,则应尝试如下操作:
data
import { Component, OnInit } from '@angular/core'; import { Http, Headers, RequestOptions } from '@angular/http'; import 'rxjs/add/operator/toPromise'; import { Observable } from 'rxjs/Observable'; @Component({ selector: 'app-root', template: '<h1>Dukes</h1>', // templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit { title = 'here beta'; dukes = [{ name: "offline", age: 2 }]; data = "data=\"{title: 'foo',body: 'bar',userId: 1};\""; headers: Headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); options: RequestOptions = new RequestOptions({ headers: this.headers }); constructor(private http: Http) { } ngOnInit() { let options = new RequestOptions(); options.headers = new Headers(); options.headers.append('Content-Type', 'application/x-www-form-urlencoded'); const req = this.http.post('http://localhost:8080/SampleProject/getTutorial', this.data, options) .subscribe( res => { console.log(res); }, err => { console.log("Error occured"); } );
但我认为您想通过json将它们全部设置为不同的动作属性,如果是,请定义的setter title,body然后userId在您的动作中继续使用Struts JSON插件- JSON拦截器
title
body
userId
import { Component, OnInit } from '@angular/core'; import { Http, Headers, RequestOptions } from '@angular/http'; import 'rxjs/add/operator/toPromise'; import { Observable } from 'rxjs/Observable'; @Component({ selector: 'app-root', template: '<h1>Dukes</h1>', // templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent implements OnInit { title = 'here beta'; dukes = [{ name: "offline", age: 2 }]; data = { "title": "foo", "body": "bar", "userId": 1 }; headers: Headers = new Headers({ 'Content-Type': 'application/json' }); options: RequestOptions = new RequestOptions({ headers: this.headers }); constructor(private http: Http) { } ngOnInit() { let options = new RequestOptions(); options.headers = new Headers(); options.headers.append('Content-Type', 'application/json'); const req = this.http.post('http://localhost:8080/SampleProject/getTutorial', JSON.stringify(this.data)/*CONVERTS DATA TO STRING*/, options) .subscribe( res => { console.log(res); }, err => { console.log("Error occured"); } );
public class SampleAction { private String title; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } private String body; public String getBody() { return body; } public void setBody(String body) { this.body= body; } private int userId; public String getUserId() { return userId; } public void setUserId(int userId) { this.userId= userId; } public int execute() { try{ actorSeqID = 3; System.out.println(data+"--"); }catch(Exception e){ e.printStackTrace(); } return actorSeqID; }
<package name="default" namespace="/" extends="struts-default,json-default"> <action name="getTutorial" method="execute" class="SampleAction"> <interceptor-ref name="json"></interceptor-ref> </action> </package>