2017-06-20 51 views
0

我想從Spring控制器返回一個字符串(json字符串)作爲對它接收的AJAX調用的響應,響應可能會根據我是否具有@Valid窗體而有所不同提交。這是我如何處理它,並想知道這是否被認爲是最佳做法? 請注意我正在使用@RestController,因此@ResonseBody應用所有方法。從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已經可以

你可以簡單地返回一個帶有Seri​​alizable接口的對象 - 一個簡單的POJO和一個 和spring將處理其餘的。

如需進一步讀數:

+0

我已經有ResonseBody應用於所有方法,因爲我使用的是@RestController,還有更多我想要做的只是返回成功:如果一切順利或發送成功:true,然後驗證錯誤作爲json中的關鍵值對。 –

+0

基本上我有解釋和@nick savenia代碼示例 –

+0

我的建議, –

0

創建POJO如下給出:

public class SuccessPOJO{ 
private String success; 

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

現在您可以設置成功消息的值並返回此SuccessPOJO對象。在瀏覽器中,您將收到帶有成功消息的JSON格式化對象!

+0

是的,但我想發送的驗證錯誤也可以在數量上變化,我將如何發送? –

相關問題