gpt4 book ai didi

json - Spring MVC Controller 将请求对象添加到响应

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

我正在使用 Spring 3.0.5 构建一个 JSON REST 服务,我的响应 包含来 self 的请求 的对象,尽管我没有添加它。我正在使用 MappingJacksonJsonView 和 Jackson 1.6.4 将 ModelAndView 对象呈现为 JSON。

用户对象很简单

public class SimpleUser {
private String username;
private String password;

public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password;
}
}

其中一个请求看起来像这样

@RequestMapping(value = "/register", method = RequestMethod.GET)
public ModelAndView register(SimpleUser user) {
ModelAndView mav = new ModelAndView();
mav.addObject("ok", "success");
return mav;
}

然后我调用服务

curl 'http://localhost:8080/register?username=mike&password=mike'

我期望的响应是

{"ok": "success"}

我得到的响应是

{"ok":"success","simpleUser":{"username":"mike","password":"mike"}}

将用户对象添加到 ModelAndView 的位置和原因,我该如何防止这种情况发生?

可能的解决方案

解决此问题的一种方法是使用 Model 而不是 SimpleUser。这似乎可行,但应该可以使用业务对象。

这个有效:

@RequestMapping(value = "/register", method = RequestMethod.GET)
public ModelAndView register(Model model) {
log.debug("register(%s,%s)", model.asMap().get("usernmae"), model.asMap().get("password"));
ModelAndView mav = new ModelAndView();
mav.addObject("ok", "success");
return mav;
}

最佳答案

看起来您正在尝试处理表单提交并通过 ajax 检索结果。如果是这种情况,您不想返回 ModelAndView 对象。使用 @ResponseBody 注释让 Jackson 将您的返回对象表示为 json 对象。

public @ResponseBody Map registerUser(SimpleUser user){
Map responseMap = new HashMap();
if(registerUser(user)){
responseMap.put("OK", "Success");
} else {
responseMap.put("OK", "Failure");
}
return responseMap;
}

关于json - Spring MVC Controller 将请求对象添加到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4679084/

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