2016-04-01 9 views
0

私はここで間違っていることを確かめることができません。私は、サービスにリクエストを送るために "Postman"というアプリを使用しています。パラメータは以下に示す非常に単純なPOJOです。私はリクエストを送信しようとすると、私は応答を得る:「要求エンティティは、要求されたメソッドのために要求されたリソースによってサポートされていない形式であるため、サーバーはこの要求を拒否した」RequestMapping POST APIに関する問題?

要求のために使用されるクラス:

public class LoginAttempt { 

     private String userName; 
     private String password; 
     public String getUserName() { 
      return userName; 
     } 
     public void setUserName(String userName) { 
      this.userName = userName; 
     } 
     public String getPassword() { 
      return password; 
     } 
     public void setPassword(String password) { 
      this.password = password; 
     } 
    } 

コントローラでのAPI:

@RequestMapping(value="/validate", method=RequestMethod.POST, produces="application/json") 
public boolean validateUser(@RequestBody LoginAttempt login) { 
    System.out.println("Login attempt for user " + login.getUserName() + login.getPassword()); 
    return true; 
} 

答えて

1

ただ、このBeanを追加してみてください:

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
    <property name="prefixJson" value="false"/> 
    <property name="supportedMediaTypes" value="application/json"/> 
</bean> 
+0

ありがとうございました。私はSpring 4.Xを使用していますので、org.springframework.http.converter.json.MappingJackson2HttpMessageConverterです – thurmc

2

FormHttpMessageConverterコンテンツタイプがapplication/x-www-form-urlencodedの場合、@ RequestBody-annotatedパラメータは、対象クラスを@ ModelAttributeとしてバインドできません。 したがって、あなたの代わりにこの

 public boolean validateUser(@ModelAttribute LoginAttempt login) 

または適切なヘッダは次のように属性を使用すると、別のメソッドフォーム処理フォームデータを作成することができるように代わり@RequestBodyの@RequestBody

どちらかを使用@ModelAttribute注釈の@ModelAttributeが必要:

@RequestMapping(value="/validate", method=RequestMethod.POST, headers = "content-type=application/x-www-form-urlencoded" produces="application/json") 
+0

バックエンドからのエラーを取り除きましたが、今はlogステートメントがいくつかのインスタンス変数の2つのヌル値を出力しています理由 – thurmc