2017-06-20 20 views
0

AJAX呼び出しに対する応答としてスプリングコントローラから文字列(json文字列)を返したい場合、レスポンスは@Valid形式を持っているかどうかによって異なります提出された。これはどのように私はそれを処理していると、これがベストプラクティスと見なされているかどうかを調べたいですか? @ResonseBodyがすべてのメソッドを適用するように、@RestControllerを使用しています。SpringコントローラのメソッドからJsonの応答を送信するベストプラクティス

@RequestMapping(value = "/save" , method = RequestMethod.POST) 
public String saveScheduledAlert(@Valid ScheduledAlertForm scheduledAlertForm, BindingResult bindingResult) { 
    StringBuilder jsonString = new StringBuilder(); 
    if(bindingResult.hasErrors()){ 
     jsonString.append("{\"success\" : \"false\""); 
     for(ObjectError error : bindingResult.getAllErrors()) 
      jsonString.append(",\"").append(((FieldError) error).getField()).append("\":\"").append(error.getDefaultMessage()).append("\""); 
    } else { 
     //save the data 
     jsonString.append("{\"success\" : \"true\""); 
    } 

    jsonString.append("}"); 
    return jsonString.toString(); 


} 
+0

@ResponseBody注釈? - https://stackoverflow.com/questions/28646332/how-exactly-works-the-spring-responsebody-annotation-in-this-restful-applicatio –

+0

私は春の起動アプリケーション@RestControllerを使用しています –

答えて

1

ので、基本的にはあなたが何をしたいのか2つのPOJO

public class RestWrapperDTO { 
    protected boolean success; 
    public boolean isSuccess() { 
     return success; 
    } 
    public void setSuccess(boolean value) { 
     success = value 
    } 
} 

と別のエラーを生成しているDTO

public class RestErrorDTO extends RestWrapperDTO { 
    private Map<String, String> errors; 

    public Map<String, String> getErrors() { 
     return errors; 
    } 
    public void setErrors(Map<String, String> value) { 
     errors = value 
    } 
} 

とあなたのコントローラ

@RequestMapping(value = "/save" , method = RequestMethod.POST) 
public RestWrapperDTO saveScheduledAlert(@Valid ScheduledAlertForm scheduledAlertForm, BindingResult bindingResult) { 
    StringBuilder jsonString = new StringBuilder(); 

    if(bindingResult.hasErrors()){ 
     RestErrorDTO errorDTO = new RestErrorDTO(); 
     // fill map with errors here 
     return errorDTO; 
    } else { 
     RestWrapperDTO wrapperDTO = new RestWrapperDTO(); 
     wrapperDTO.setSuccess(true); 
     return wrapperDTO; 
    } 
} 

そうではありません最も十分なコード、buそれはあなたを助けるべきであるT:D

あなたは、単純な@Controllerアノテーションを使用している場合 - が探してあなたがいるものは@ResponseBody -annotation

であるか、これよりも@RestController使用した場合、すでに提供されています

インターフェイスを使用してオブジェクトを返すことができます。シリアル化可能 - 単純なPOJOと残りの部分は春が処理します。さらに測定値については

+0

私はすでにResonseBodyを持っています@RestControllerを使用しているときにすべてのメソッドに適用されています。私がやりたいことは、成功を返すだけです。すべて成功した場合はtrue、それ以外はjson thatsのすべてのキー値ペアとしてfalseを返します。 –

+0

基本的に私は説明と@ニックsaveniaのコード例 –

+0

私の推薦、 –

0

については以下に示すようPOJOを作成します。

public class SuccessPOJO{ 
private String success; 

..... 
getters and setters 
..... 
} 

ここで成功メッセージの値を設定し、これを返すことができますSuccessPOJOオブジェクトです。ブラウザには、JSONという形式のオブジェクトが成功メッセージとともに表示されます。

+0

はい、私もバリデーションエラーを送信したいのですが、それは数値で変わる可能性があります。どうすれば送信できますか? –

関連する問題