[英]How to parse only 1 variable from JSON HTTP response 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.