繁体   English   中英

AngularJS http从Spring Boot没有响应

[英]Angularjs http no response from Spring Boot

我正在尝试开发一个小型应用程序,以在本地Elasticsearch引擎上创建索引。 我在前端使用angularjs,在后端使用spring-boot。 它可以成功创建索引,但是,当我想在前端检索响应时,它总是向我抛出错误。

以下是我的AngularJS api调用:

app.service('ESIndexService', function($http) {

    this.createESIndex = function(esindexObj) {
        var settings = {
                method: 'POST',
                url: BASE_URL + "/ESIndex/createESIndex",
                data: esindexObj
            };
        return $http(settings).then(function(response) {
            console.log("response:"+response);
            return response;
        }, function(error) {
            console.log("error:"+error);
            return error;
        });
    };


});

然后这是我的控制器:

@CrossOrigin
@RestController
@RequestMapping(value = "ESIndex")
public class ESIndexController {

    @RequestMapping(value = "createESIndex", method = RequestMethod.POST)
    public @ResponseBody String createIndex(@RequestBody ESIndex esIndex) {
        try {
            Settings settings = Settings.builder()
                    .put("xpack.security.user", String.format("%s:%s", Constants.ES_UNAME, Constants.ES_PWD)).build();
            TransportClient client = new PreBuiltXPackTransportClient(settings)
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Constants.ES_HOST), Constants.ES_PORT));
            CreateIndexResponse response = client.admin().indices().prepareCreate(esIndex.getName()).setSettings(Settings.builder()
                    .put("index.number_of_shards", esIndex.getNumberOfShards())
                    .put("index.number_of_replicas", esIndex.getNumberOfReplicas())).get();
            client.close();
            if(response.isAcknowledged() && response.isShardsAcked())
                return Constants.SUCCESS;
            else
                return "Fail to create index!";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }
}

我想在AngularJS响应中获取响应状态和数据。 但是,它总是向我抛出错误:

error:SyntaxError: Unexpected token i in JSON at position 0

我没有使用JSON.parse函数,为什么它会给我这样的错误?


添加responseType:'text'之后,仍然抛出相同的错误,chrome nextwork 在此处输入图片说明

原来我需要添加“ transformResponse:未定义”,但是,在我的另一个项目中,我从未这样做。 有什么不同?

AngularJS:

this.newBlog = function(blogObj) {
    var settings = {
        method: 'POST',
        url: baseUrl + "/blog/newBlog.do",
        data: blogObj
    }
    return $http(settings).then(function(response) {
        return response;
    }, function(error) {
        return error;
    });
};

Java控制器:

@RequestMapping(value="newBlog.do", method=RequestMethod.POST)
public @ResponseBody String newBlog(@RequestBody Blog blog, HttpServletRequest request) {

    User createdBy = (User) request.getSession().getAttribute("user");
    if(createdBy == null)
        return NO_SESSION_MSG;
    else {
        createdBy.setPwd(null);
        blog.setCreatedAt(TQBUtilities.getCurrentTime());
        blog.setLastUpdatedAt(TQBUtilities.getCurrentTime());
        blog.setCreatedBy(createdBy);
        return blogService.newBlog(blog);
    }

}

Angular自动尝试将服务器响应解析为JSON。 尝试将其添加到您的设置对象

responseType: 'text'

所以

var settings = {
    method: 'POST',
    url: BASE_URL + "/ESIndex/createESIndex",
    data: esindexObj,
    responseType: 'text'
};

@jheimbouch将“ transformResponse:未定义”添加到http调用,如下所示,效果很好:

var settings = {
        method: 'POST',
        url: BASE_URL + "/ESIndex/createESIndex",
        data: esindexObj,
        transformResponse: undefined
};

但是,为什么在angularjs 1.6.2中需要它? 当我使用AngularJS 1.4.8时,不需要添加transformResponse属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM