2017-03-26 7 views
0

私はSpringフレームワークではじまり、質問したいと思います。 私のDBに登録するPOSTリクエストを正しく渡しますか?POSTリクエストの受け渡し。セキュリティを守る。残りのテンプレート。ジャクソンコンバーター

私はAndroidクライアントを持っていて、ウェブサービスを扱う唯一の方法を見つけました。 AsyncTaskを使用してリクエストを管理しています。

私のUserクラスでPOSTリクエストを送信してデータベースに登録する方法がわかりません。 データベースのロジックがすでに完了しています。

リクエストの投稿方法と、彼のサーバーでの管理方法を教えてください。だからここ

が私のコードです:

サーバー側、ユーザーコントローラ:

public class CreateAccountPresenter implements CreateAccountContract.Presenter { 
    private CreateAccountContract.View view; 
    private String userName; 
    private String userPassword; 
    private String confirmUserPassword; 


    public CreateAccountPresenter(CreateAccountContract.View view) { 
     this.view = view; 
    } 

    @Override 
    public void onCreateAccountClick() { 
     userName = view.getUserName(); 
     userPassword = view.getPassword(); 
     confirmUserPassword = view.getPasswordConfirmation(); 
     new CreateAccountTask().execute(); 

    } 

    private class CreateAccountTask extends AsyncTask<Void, Void, User>{ 
     // How do I properly pass the post request with my User object ? 
     @Override 
     protected User doInBackground(Void... voids) { 
      RestTemplate restTemplate = new RestTemplate(); 
      restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
      User user = new User(userName, userPassword, confirmUserPassword); 
      return restTemplate.postForObject(URL.getUserRegistration(), user, User.class); 
     } 

     @Override 
     protected void onPostExecute(User user) { 
      view.makeToast("User registration complited " + user.getUserName()); 
     } 
    } 

} 

の操作を行います。

@RestController 
@RequestMapping("/user") 
public class UserController { 

    @Autowired 
    private UserService userService; 

    @Autowired 
    private SecurityService securityService; 

    @Autowired 
    private UserValidator userValidator; 


    @RequestMapping(value = "/registration", method = RequestMethod.POST) 
    @ResponseBody 
    public User registration(@RequestBody User user, BindingResult bindingResult, Model model) { 
     userValidator.validate(user, bindingResult);// here is validate logic 
     if (bindingResult.hasErrors()) { 
      //What should i return here to my Android client ? 
     } 
     userService.save(user); 
     securityService.autoLogin(user.getUserName(), user.getConfirmPassword()); 
     return user; 
    } 

    @RequestMapping(value = "/login", method = RequestMethod.GET) 
    public String login(Model model, String error, String logout) { 
     if (error != null) { 
      model.addAttribute("error", "Username or password is incorrect."); 
     } 

     if (logout != null) { 
      model.addAttribute("message", "Logged out successfully."); 
     } 

     return "login";// what should I return to the client ??? 
     //How my android client will understand that user is loged in ? 
    } 
} 

次の私は、クライアント側(ここではいくつかのMVPロジックが、NVM)を持っています私はクライアント側でコンバータを初期化する必要がありますか? コメントを募集してもらうと助けを求めることもできます。私は少しのクライアント側のコードを変更

UPDATEは、NADは、今私はクライアント側で次のエラーを取得しています:

W/RestTemplate: POST request for "http://192.168.0.80:8080/user/registration" resulted in 400 (Bad Request); invoking error handler E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: com.example.user.userauthorisation, PID: 4676 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: org.springframework.web.client.HttpClientErrorException: 400 Bad Request at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88) at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:585) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:541) at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:499) at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:348) at com.example.user.userauthorisation.createaccount.CreateAccountPresenter$CreateAccountTask.doInBackground(CreateAccountPresenter.java:42) at com.example.user.userauthorisation.createaccount.CreateAccountPresenter$CreateAccountTask.doInBackground(CreateAccountPresenter.java:35) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  at java.lang.Thread.run(Thread.java:818)  W/EGL_emulation: eglSurfaceAttrib not implemented W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xeb89dde0, error=EGL_SUCCESS 

とサーバ側の

すべてのヘルプ
2254021 [http-apr-8080-exec-2] WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unrecognized field "confirmationPassword" (class com.webserverconfig.user.entity.User), not marked as ignorable (4 known properties: "id", "confirmPassword", "userName", "userPassword"]) 
at [Source: [email protected]; line: 1, column: 26] (through reference chain: com.webserverconfig.user.entity.User["confirmationPassword"]); nested exception is com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "confirmationPassword" (class com.webserverconfig.user.entity.User), not marked as ignorable (4 known properties: "id", "confirmPassword", "userName", "userPassword"]) 
at [Source: [email protected]; line: 1, column: 26] (through reference chain: com.webserverconfig.user.entity.User["confirmationPassword"]) 

ください。 ?

答えて

0

Userは共有されませんでしたが、エラーログにはのフィールドにアクセスしようとしていることが示されていますが、confirmPasswordしかありません。 Beanのゲッタ名を確認してください。

+0

はい、修正しました。今登録メソッドは正常に動作します。私は、ログイン方法にのみ問題があります。 – Andrew

関連する問題