2016-02-19 2 views
2

У меня есть веб-приложение AngularJS с RESTful Jersey Api в качестве Backend.Response.success undefined in angular

Я разработка и тестирование этого 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-интерфейс работает хорошо вызвать пользователь создается на задней торцевой стороне (в моей собственной БД)

enter image description here

, но на угловом веб-приложении результат ответа составляет undefined.

enter image description here

Эти конфигурации моего Бауэра:

"dependencies": { 
"angular": "1.4.x", 
"angular-mocks": "1.4.x", 
"jquery": "~2.1.1", 
"bootstrap": "~3.1.1", 
"angular-route": "1.4.x"} 

У меня есть также другие API (GET вызов), которые хорошо работают (задний конец ответ 200 и на веб-приложение достигает 200).

Вы можете мне помочь?

Спасибо в продвижении.

ответ

2

Ваш внутренний код не имеет никакого ответа на корпус. добавьте 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(); 
1

Вы не придавая никакого тела к ответу на внутреннем интерфейсе:

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(); 

Преобразователь-конфигурация может отличаться для вашего используемого случая ...