如何使用 REST 将数据从 AngularJS 发布到 Struts 2

Posted

技术标签:

【中文标题】如何使用 REST 将数据从 AngularJS 发布到 Struts 2【英文标题】:How to POST data from AngularJS to Struts 2 using REST 【发布时间】:2016-09-01 00:37:22 【问题描述】:

我需要从客户端获取值到服务器端。我正在使用 AngularJS 和 Struts2 REST。

我的控制器没有获得传递的值,还是我在传递或使用 RESTful 控制器时出错了?

这是我的代码:

angularcontroller.js:

app.controller('saveAddCatCtrl', function($scope, $http)
    $scope.save = function(newAddCat)
        $http(
            method: "POST",
            url: "api/additionalcategory",
            data: $scope.additionalCategory.addCatName
        ).success(function(data, status, header, config)
            //success
        ).error(function(data, status, header, config)
            //error
        );

);

这是我的 REST 控制器:

public class AdditionalcategoryController extends ActionSupport implements ModelDriven<Object>

private AdditionalCategoryRepository additionalCategoryRepository =
        (AdditionalCategoryRepository)ServletActionContext.getServletContext()
        .getAttribute("additionalCategoryRepository");

private List<AdditionalCategory>            additionalCategories;
public AdditionalCategory                   additionalCategory = new AdditionalCategory();
private int                                 id;

public HttpHeaders index()
    setAdditionalCategories(additionalCategoryRepository.findAllAdditionalCategory());
    System.out.println("GET api/additionalCategory");
    return new DefaultHttpHeaders("index").disableCaching();


public HttpHeaders create()
    additionalCategoryRepository.createAdditionalCategory(additionalCategory);
    return new DefaultHttpHeaders("create").disableCaching();


public void setAdditionalCategories(List<AdditionalCategory> additionalCategories)
    this.additionalCategories = additionalCategories;


@Override
public Object getModel() 
    if (additionalCategories == null)
        return additionalCategory;
    else
        return additionalCategories;
    


public int getId() 
    return id;


public void setId(int id) 
    this.id = id;


public List<AdditionalCategory> getAdditionalCategories() 
    return additionalCategories;


public AdditionalCategory getAdditionalCategory() 
    return additionalCategory;


public void setAdditionalCategory(AdditionalCategory additionalCategory) 
    this.additionalCategory = additionalCategory;



【问题讨论】:

您应该发布代码,这将有助于识别您的问题 How to access the services from RESTful API in my angularjs page?的可能重复 那还能读struts2 rest吗? TIA。 试过了,但是 struts2 控制器没有从角度获取数据。 :( 你的 struts2 控制器有响应吗? 【参考方案1】:

由于 Angular 服务 http 发送 JSON,您可以使用 data 属性发送 JSON 对象。 JSON 对象将被反序列化为您的模型类属性,因为您使用的是 ModelDrivenAction 类属性。

Struts2 REST plugin 用于处理来自请求的 JSON 内容。这可能是由于ContentTypeInterceptor(称为rest)能够找到请求的JSON 处理程序。 JSON 处理程序是从 URL 中文件的 Content-Type 标头或 .json 扩展名猜测的。您可以使用任何一种方式,但第二种方式更容易。

注意:

没有文件扩展名的 Struts2 REST 插件默认处理 xhtml 内容的 URL。所以你可以修改你的代码

$http(
    method: "POST",
    url: "api/additionalcategory.json",
    data: 
).success(function(data, status, header, config)
    //success
).error(function(data, status, header, config)
    //error
);

【讨论】:

以上是关于如何使用 REST 将数据从 AngularJS 发布到 Struts 2的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CSRF 令牌从 AngularJS 前端发送到 Spring REST 服务后端?

如何将 REST 与 Node.js 和 AngularJS 一起使用在不同的端口上?

如何使用 AngularJS 和 Restangular 返回/编辑 REST 资源

如何使用 AngularJS 和 Restangular 返回/编辑 REST 资源

Angularjs应用程序没有响应Wcf REST服务

将AngularJS应用程序与WSO2身份服务器集成