Response.success angular 未定义
Response.success undefined in angular
我有一个 AngularJS Web 应用程序,后端是 RESTful Jersey Api。
我正在开发和测试此 api 以创建用户:
function Create(user) {
return $http.post('http://localhost:8080/NobelGrid/api/users/create/', user).then(handleSuccess, handleError('Error creating user'));
}
这是API(POST)的代码:
/**
* This API creates an user
*
* @param data
* @return
*/
@Path("create")
@POST
@Produces("application/json")
public Response create(String data) {
UserDataConnector connector;
JSONObject response = new JSONObject(data);
User userToCreate = new User(response.getString("surname"), response.getString("name"), response.getString("mail"), response.getString("username"), response.getString("password"), 0);
try {
connector = new UserDataConnector();
connector.createUser(userToCreate);
} catch (IOException e) {
e.printStackTrace();
return Response.status(500) // 500
.entity(e.getMessage()).header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();
}
return Response.status(200)// 200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();
}
/**
* CORS compatible OPTIONS response
*
* @return
*/
@Path("/create")
@OPTIONS
@Produces("application/json")
public Response createOPT() {
return Response.status(200) // 200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS")
.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
.build();
}
API 效果很好,因为用户是在后端创建的(在我自己的数据库中)
但在 angular 网络应用程序上,响应结果为 undefined
。
这些是我凉亭的配置:
"dependencies": {
"angular": "1.4.x",
"angular-mocks": "1.4.x",
"jquery": "~2.1.1",
"bootstrap": "~3.1.1",
"angular-route": "1.4.x"}
我还有其他 APIs(GET 调用)运行良好(后端响应为 200,在网络应用程序上到达 200)。
你能帮帮我吗?
在此先致谢。
您没有在后端的回复中附加任何正文:
return Response.status(200)// 200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();
您需要设置一个编写器并使用它来序列化您的对象:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.PROTECTED_AND_PUBLIC);
ObjectWriter w = mapper.writer();
ResponseBuilder responseBuilder = Response
.ok(w.writeValueAsString(userToCreate ));
responseBuilder.header("Access-Control-Allow-Origin", "*");
responseBuilder.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
return responseBuilder.build();
您的用例的映射器配置可能不同...
您的后端代码没有任何正文响应。将 ResponseBuilder entity
添加到您的 Response.it 应该是这样的:
return Response.status(Response.Status.OK)// Response.Status.OK: 200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")
.entity(userToCreate).build();
我有一个 AngularJS Web 应用程序,后端是 RESTful Jersey Api。
我正在开发和测试此 api 以创建用户:
function Create(user) {
return $http.post('http://localhost:8080/NobelGrid/api/users/create/', user).then(handleSuccess, handleError('Error creating user'));
}
这是API(POST)的代码:
/**
* This API creates an user
*
* @param data
* @return
*/
@Path("create")
@POST
@Produces("application/json")
public Response create(String data) {
UserDataConnector connector;
JSONObject response = new JSONObject(data);
User userToCreate = new User(response.getString("surname"), response.getString("name"), response.getString("mail"), response.getString("username"), response.getString("password"), 0);
try {
connector = new UserDataConnector();
connector.createUser(userToCreate);
} catch (IOException e) {
e.printStackTrace();
return Response.status(500) // 500
.entity(e.getMessage()).header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();
}
return Response.status(200)// 200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();
}
/**
* CORS compatible OPTIONS response
*
* @return
*/
@Path("/create")
@OPTIONS
@Produces("application/json")
public Response createOPT() {
return Response.status(200) // 200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS")
.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia,Authorization")
.build();
}
API 效果很好,因为用户是在后端创建的(在我自己的数据库中)
但在 angular 网络应用程序上,响应结果为 undefined
。
这些是我凉亭的配置:
"dependencies": {
"angular": "1.4.x",
"angular-mocks": "1.4.x",
"jquery": "~2.1.1",
"bootstrap": "~3.1.1",
"angular-route": "1.4.x"}
我还有其他 APIs(GET 调用)运行良好(后端响应为 200,在网络应用程序上到达 200)。
你能帮帮我吗?
在此先致谢。
您没有在后端的回复中附加任何正文:
return Response.status(200)// 200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT").build();
您需要设置一个编写器并使用它来序列化您的对象:
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.PROTECTED_AND_PUBLIC);
ObjectWriter w = mapper.writer();
ResponseBuilder responseBuilder = Response
.ok(w.writeValueAsString(userToCreate ));
responseBuilder.header("Access-Control-Allow-Origin", "*");
responseBuilder.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
return responseBuilder.build();
您的用例的映射器配置可能不同...
您的后端代码没有任何正文响应。将 ResponseBuilder entity
添加到您的 Response.it 应该是这样的:
return Response.status(Response.Status.OK)// Response.Status.OK: 200
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")
.entity(userToCreate).build();