2014-10-18 3 views
1

Я использую «Модернизацию» для отправки запроса на службу Spring Boot, но всегда называется отказом метода обратного вызова. Это мой упрощенный код:Модернизация POST-запроса службы Spring Boot

Spring загрузки службы (контроллер):

@RestController 
public class ServController { 

    @Autowired 
    private UserRepository userRepository; 

    @RequestMapping(value = "/user", method = RequestMethod.POST) 
    public Boolean signUpUser(@RequestBody User user) 
    { 

     return true; 
    } 
} 

Мой клиент интерфейс:

public interface ChainApi { 

    public static final String USER_PATH = "/user"; 

    @POST(USER_PATH) 
    public void signUpUser(@Body User user, Callback<Boolean> callback); 
} 

Асинхронный POST запрос:

User user = new User(); 
user.setId(12); 
user.setName(nameEtx.getText().toString()); 
user.setEmail(emailEtx.getText().toString()); 
user.setPassword(passwordEtx.getText().toString()); 

RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(Constant.URL_LOCALHOST) 
      .build(); 

ChainApi service = restAdapter.create(ChainApi.class); 

service.signUpUser(user, new Callback<Boolean>() { 
    @Override 
    public void success(Boolean aBoolean, Response response) { 

     Log.i(TAG, "Succesfull"); 

    @Override 
    public void failure(RetrofitError error) { 

     Log.i(TAG, "Error " + error.getMessage()); // 400 Bad Request 

    } 
}); 

Это мой Пользователь класс (POJO):

@JsonIgnoreProperties(value = { "additionalProperties"}) 
public class User { 

    @JsonProperty("id") 
    private Integer id; 
    @JsonProperty("name") 
    private String name; 
    @JsonProperty("password") 
    private String password; 
    @JsonProperty("email") 
    private String email; 
    @JsonIgnore 
    private Map<String, Object> additionalProperties = new HashMap<String, Object>(); 

    // methods 
} 

ПРИМЕЧАНИЯ: Я занимаюсь разработкой в ​​Android, и когда вы делаете ручной запрос POST от Postman, я получаю 200 OK. Кроме того я получаю в LogCat сообщение: 400 Bad Request

+0

сообщения об ошибке, что вы получаете –

+0

Обновлено свой пост в заключительной части – kelvincer

+0

Похоже, ваш сервер не нравится что-то из вашего запроса, возможно, что-то не хватает в нем. Взгляните на журналы на сервере, они, вероятно, укажут вас в правильном направлении. –

ответ

2

дооснащения использует GSON в качестве значения по умолчанию Converter. @JsonIgnoreProperties - аннотация из Джексона. Глядя на ваш RestAdapter, вы, похоже, не указали Конвертер Джексона.

Square реализовал JasksonConverter, вы используете его, включив зависимость.

compile 'com.squareup.retrofit:converter-jackson:X.X.X' 

Используйте версию, соответствующую вашей модификации.

Тогда

JacksonConverter converter = JacksonConverter(new ObjectMapper()); 
RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(Constant.URL_LOCALHOST) 
      .setConverter(converter) 
      .build(); 
+0

Miguel ваше решение не работает. Мне пришлось внести следующие изменения: compile 'com.squareup.retrofit: converter-jackson: 1.7.0' И конвертер JacksonConverter = новый JacksonConverter (новый ObjectMapper()); – kelvincer

+0

Я обновил свой Приносим извинения за ошибки. Извиняюсь за ошибки. Насколько я знаю, вам нужно использовать JasksonConverter, если вы хотите, чтобы Retrofit правильно сериализовал/десериализовал ваш JSON, если Джексон - ваш основной инструмент JSON. К сожалению, я не тот famili как настроить/использовать Jackson. –

+0

ОК Мигель. Благодарю. – kelvincer

Смежные вопросы