Java 从Spring控制器方法发送Json响应的最佳实践
我想从spring控制器返回一个字符串(json字符串),作为对它接收到的AJAX调用的响应,根据我是否提交了@Valid表单,响应可能会有所不同。我就是这样处理的,想知道这是否被视为最佳实践? 请注意,我使用@RestController,因此@ResonseBody应用所有方法Java 从Spring控制器方法发送Json响应的最佳实践,java,json,spring-mvc,Java,Json,Spring Mvc,我想从spring控制器返回一个字符串(json字符串),作为对它接收到的AJAX调用的响应,根据我是否提交了@Valid表单,响应可能会有所不同。我就是这样处理的,想知道这是否被视为最佳实践? 请注意,我使用@RestController,因此@ResonseBody应用所有方法 @RequestMapping(value = "/save" , method = RequestMethod.POST) public String saveScheduledAlert(@Valid S
@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();
}
所以基本上你要做的就是生成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
}
}
这不是最充分的代码,但它应该可以帮助您:D
如果您使用的是一个简单的@Controller注释-您是什么
正在查找的是@ResponseBody
-注释
或者,如果您使用@RestController,则此选项已可用
您可以简单地返回一个接口为Serializable-a的对象
简单的POJO和spring将处理其余部分
进一步阅读:
- 对于@RestController,有一个小的解释
所以基本上你要做的就是生成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
}
}
这不是最充分的代码,但它应该可以帮助您:D
如果您使用的是一个简单的@Controller注释-您是什么
正在查找的是@ResponseBody
-注释
或者,如果您使用@RestController,则此选项已可用
您可以简单地返回一个接口为Serializable-a的对象
简单的POJO和spring将处理其余部分
进一步阅读:
- 对于@RestController,有一个小的解释
创建一个POJO,如下所示:
public class SuccessPOJO{
private String success;
.....
getters and setters
.....
}
现在,您可以设置成功消息的值并返回此
SuccessPOJO
对象。在浏览器中,您将收到带有成功消息的JSON
格式化对象 创建一个POJO,如下所示:
public class SuccessPOJO{
private String success;
.....
getters and setters
.....
}
现在,您可以设置成功消息的值并返回此
SuccessPOJO
对象。在浏览器中,您将收到带有成功消息的JSON
格式化对象 老问题但对于其他需要帮助的人,我使用一个自定义的ApiResponse
类来解决这个问题。我的班级是这样的:
public class ApiResponse<T> {
String message;
int statusCode;
T data
//....getters and setters
如您所见,我使用
Gson
依赖项来创建我的JSON字符串。旧问题,但对于其他需要帮助的人,我使用自定义的ApiResponse
类。我的班级是这样的:
public class ApiResponse<T> {
String message;
int statusCode;
T data
//....getters and setters
如您所见,我使用
Gson
依赖项来创建JSON字符串。@ResponseBody annotation?-我正在使用@RestController它是一个弹簧靴application@ResponseBody注释?-我正在使用@RestController它是一个spring引导应用程序我已经将ResonseBody应用于所有方法,因为我正在使用@RestController,此外,我想做的就是返回success:true如果一切顺利,或者发送success:false,然后将验证错误作为json中的键值对发送。基本上我有解释,@nick savenia代码示例我的建议,我以前考虑过返回对象,但想知道如何发送一个成功消息:错误消息以在客户端发现出现了错误?谢谢,这很有意义,但是为什么我不应该只使用一个带有布尔标志和错误映射的类呢?这难道不够简单吗?我已经将ResonseBody应用于所有方法,因为我正在使用@RestController,此外,我想做的就是返回success:true如果一切顺利,或者发送success:false,然后将验证错误作为json中的键值对发送。基本上我有解释,@nick savenia代码示例我的建议,我以前考虑过返回对象,但想知道如何发送一个成功消息:错误消息以在客户端发现出现了错误?谢谢,这很有意义,但是为什么我不应该只使用一个带有布尔标志和错误映射的类呢?这不是很简单吗?是的,但我也想发送验证错误,可以是可变的数字,我该如何发送?是的,但我也想发送验证错误,可以是可变的数字,我该如何发送?