Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Spring控制器方法发送Json响应的最佳实践_Java_Json_Spring Mvc - Fatal编程技术网

Java 从Spring控制器方法发送Json响应的最佳实践

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

我想从spring控制器返回一个字符串(json字符串),作为对它接收到的AJAX调用的响应,根据我是否提交了@Valid表单,响应可能会有所不同。我就是这样处理的,想知道这是否被视为最佳实践? 请注意,我使用@RestController,因此@ResonseBody应用所有方法

    @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代码示例我的建议,我以前考虑过返回对象,但想知道如何发送一个成功消息:错误消息以在客户端发现出现了错误?谢谢,这很有意义,但是为什么我不应该只使用一个带有布尔标志和错误映射的类呢?这不是很简单吗?是的,但我也想发送验证错误,可以是可变的数字,我该如何发送?是的,但我也想发送验证错误,可以是可变的数字,我该如何发送?