3

さて、スプリングコントローラーでネストされたjsonを取得しようとしていて、400(不正なリクエスト)エラーが発生しました。

JSON

{"AuthenticationInfo":
  {"loginId":"243324","password":"xyz"}
}

コントローラ

  @RequestMapping(value = "/login", method = RequestMethod.POST,headers={"Accept=*/*","content-type=application/json"})
    @ResponseBody
    public MySubscriber getSubscriber(@RequestBody MyAuthentication myAuthentication) {
        LOGGER.log(Level.INFO, "getSubscriber");

        System.out.println("getSubscriber method : "+myAuthentication);


        MySubscriber mySubscriber = helloWebService.getSubscriber(myAuthentication);
        LOGGER.log(Level.INFO, "mySubscriber : " + mySubscriber);
        System.out.println( "mySubscriber : " + mySubscriber);
        return mySubscriber;
    }

マイ認証

public class MyAuthentication extends AuthenticationInfo {
    private AuthenticationInfo AuthenticationInfo;

    public AuthenticationInfo getAuthenticationInfo() {
        return AuthenticationInfo;
    }

    public void setAuthenticationInfo(AuthenticationInfo authenticationInfo) {
        AuthenticationInfo = authenticationInfo;
    }

    @Override
    public String toString()
    {
        return "AuthenticationInfo : "+AuthenticationInfo;
    }
}

認証情報

    public class AuthenticationInfo {
        private String loginId;
        private String password;
        public String getLoginId() {
            return loginId;
        }
        public void setLoginId(String loginId) {
            this.loginId = loginId;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }

        @Override
        public String toString()
        {
            return "{ loginId : "+loginId+" || password"+password+"}";
        }
    }

単純なJsonを起動してそれに応じて取得すると、エラーが発生します。ここでの唯一の問題は、Json のネストされた構造です。

4

2 に答える 2

1

今、私が何を言おうとしていても、ばかげているように聞こえるかもしれません。これがjacksonまたは他のJSONライブラリのみの動作であるかどうかはわかりません。

MyAuthentication クラスで宣言されたプライベート プロパティの大文字と小文字を変更するだけです。以下のようなものを使用します。

private AuthenticationInfo authenticationInfo;

ケースに合わせてリクエストを変更する必要があるため、以下を使用します。

{"authenticationInfo":{"loginId":"abcsdsd","password":"adsfsdfsdbcsdsd"}}

これは完全に正常に機能します。

于 2013-08-31T04:28:55.570 に答える