4

Springは、@ ResponseBodyパラメーターとして詳細を受信するときに正しいタイプの新しいオブジェクトを作成します(たとえばpublic void createUser(@RequestBody User user)、データをJSONとしてサーバーに送信し、Springは指定されたとおりに新しいユーザーオブジェクトを作成します。

私の質問は、Springに私が持っている自動生成されたフィールド(createDateなど)を無視させる方法はありますか?したがって、たとえば、{"username":"sam"}他に何も渡さない場合は、ユーザー名フィールドのみが入力され、他のフィールドは含まれない(無効な場合でも)ユーザーオブジェクトが必要です。

私がこれを求めている理由は、ユーザーがタッチできない別のオブジェクトからデフォルトの自動生成属性を継承しているためです。リクエストからのフィールドを除いて、すべてのフィールドがnullであるオブジェクトが必要です。更新:次に、新しく作成されたオブジェクトをJpaRepository内のオブジェクトとマージできます(nullは無視されます)。

ありがとうございました :-)

4

2 に答える 2

0

それを行う方法があります。例:@initBinder or convertService、しかし、それはより複雑になり、そのコードを実行するための正確な実装もわかりません。最も簡単な方法は、新しいクラスを作成することです。次のように呼ばれる場合がありますTmpUser。フィールドはuserNameの1つだけです。このクラスを使用してリクエストデータを受け入れ、データをUserにコピーすると、要件を満たすことができます。を使用Spring utils. BeanUtils.copyProperties()してコピーを行うことができます。

于 2013-03-05T01:38:42.663 に答える
0

User オブジェクトを返す場合、デフォルトですべてのフィールドが自動的に含まれ、変更することはできません。ただし、uername が入力された HashMap を返すことができます。

@ResponseBody public Map createUser(@RequestBody User user) {
    ...
    Map userCreated = new HashMap();
    userCreated.put("username", user.getUsername());
    return userCreated;
}

別の方法として、新しい UserForm オブジェクトを定義して作成し、以下のように期待どおりの結果を返すことができます。

public class UserForm{

    private String username;

    public UserForm(User user){
        this.username = user.getUsername();
    }

    public void setUsername(String username){
        this.username = username;
    }

    public String getUsername(){
        return this.username;    
    }
}

@ResponseBody public UserForm createUser(@RequestBody User user) {
    ...

    return new UserForm( user );
} 

それが役立つことを願っています。

于 2013-03-05T01:02:53.010 に答える