gpt4 book ai didi

java - 从 Spring Controller 方法发送 Json 响应的最佳实践

转载 作者:行者123 更新时间:2023-12-02 02:45:20 26 4
gpt4 key购买 nike

我想从 spring Controller 返回一个字符串(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();


}

最佳答案

老问题,但对于其他需要帮助的人,我为此使用自定义 ApiResponse 类。我的类(class)如下所示:

public class ApiResponse<T> {
String message;
int statusCode;
T data

//....getters and setters

这样,我可以使用“SUCCESS”或“ERROR”作为消息,使用适当的 HttpStatus 代码,然后使用任何类型作为我想要发送的数据。

然后,在 Controller 中,我只需执行以下操作:

@PostMapping("/sign-up")
public ResponseEntity<String> signUp(@RequestBody Account account) {

if (accountService.getAccountByEmail(account.getEmail()) != null) {
ApiResponse<String> apiResponse = new ApiResponse<>("A user with that email
already exist", HttpStatus.CONFLICT.value(), null);
return new ResponseEntity<String>(new Gson().toJson(apiResponse), HttpStatus.CONFLICT);
}

// ... rest of controller code

如您所见,我使用 Gson 依赖项来创建 JSON 字符串。

关于java - 从 Spring Controller 方法发送 Json 响应的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44649032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com