2011-01-11 6 views
2

フロントエンドとAJAX/JSONで通信するSpring MVCアプリケーションがあります。フロントエンドにはHTMLでWebアプリケーションがあります。データベースに要素を追加するために、私は、バックエンドシステムでこれをSpring MVC 3 - >妥当性確認

の操作を行います。

@RequestMapping(value="add/", method=RequestMethod.POST) 
public @ResponseBody SerializePerson addProject(@RequestBody Person person) { 
    Person p = this.personService.addPerson(person); 
    return new SerializePerson(p.getId(), p.getName(), p.getEmail()); 
} 

しかし、今、私は誰かがせずにプロジェクトを作成できること、(これは非常に単純な例です)問題を抱えていますname = ""と有効でない電子メールアドレスです。 私の問題は、バックエンドシステムのフィールドを検証したいということです。

だから私はここではSpring MVCのショーケースを見つけました:https://src.springsource.org/svn/spring-samples/mvc-showcase/src/main/java/org/springframework/samples/mvc/validation/

彼らは、次の操作を行います。

@RequestMapping("/validate") 
public @ResponseBody String validate(@Valid JavaBean bean, BindingResult result) { 
    if (result.hasErrors()) { 
     return "Object has validation errors"; 
    } else { 
     return "No errors"; 
    } 
} 

ので、これが最善の方法ですか? (そうでない場合は、エラーが発生しない場合は、手順2に進み、ユーザにエラーメッセージを表示)

  1. は、Personオブジェクトを検証
  2. がdatbase
にPersonオブジェクトを記述します。だから私は2つのステップを行う必要があります

これらの2つのステップを1つのステップで組み合わせることはできませんか?そして、どのように私はフロントエンドからの人のPOSTオブジェクトをバックエンドの "検証"メソッドに入れ、 "オブジェクトには妥当性の誤りがある"と言ってもあまり良くないとは言えないので、どのフィールドが失敗(名前または電子メール)しているかを見ることができます:-)?

よろしくお願いいたします。

答えて

2

私はそれがこの例に示されました:http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/

@RequestMapping(method=RequestMethod.POST) 
public @ResponseBody Map<String, ? extends Object> create(@RequestBody Account account, HttpServletResponse response) { 
    Set<ConstraintViolation<Account>> failures = validator.validate(account); 
    if (!failures.isEmpty()) { 
     response.setStatus(HttpServletResponse.SC_BAD_REQUEST); 
     return validationMessages(failures); 
    } else { 
     accounts.put(account.assignId(), account); 
     return Collections.singletonMap("id", account.getId()); 
    } 
}