我有点困惑。我正在写一个MVC应用程序,并有一个像这样的简单控制器:
@Controller
public class ProfileController {
final String DEFAULT_MALE_AVATAR = "../resources/graphics/avatarMan.PNG";
final String DEAULT_FEMALE_AVATAR = "../resources/graphics/avatarWoman.PNG";
@Autowired
UserService userService;
@RequestMapping(value = "/profile", method = RequestMethod.GET)
public String index() {
return "user/profile";
}
@RequestMapping(value = "profile/getavatar", method = RequestMethod.GET)
public @ResponseBody String getLoggedUserAvatar() {
String userMail = SecurityContextHolder.getContext()
.getAuthentication().getName();
User loggedUser;
if (userMail != null) {
loggedUser = userService.findUserByEmail(userMail);
return loggedUser.getAvatar();
} else {
return DEFAULT_MALE_AVATAR;
}
}
在输入/ profile部分时,我的body html标签中还有一个名为“onload”的简单js文件。
function init() {
var url = "profile/getavatar";
$.ajax({
url : url
}).then(function(data) {
avatarLink = data;
loadAvatar(avatarLink);
});
function loadAvatar(avatarLink){
$("#userAvatar").attr("src", avatarLink);
}
}
由于一些奇怪的原因,我被驱逐到“profile / getavatar”,页面包含带有getLoggedUserAvatar()返回值的文本。有趣的是,我还有一些其他控制器,其他部分使用几乎相同的js文件和控制器 - 它们就像一个魅力。
我错过了什么?
答案 0 :(得分:0)
我希望当您直接点击网址时,您会得到预期的响应。如果没有发生,那么还有其他问题。如果您在浏览器中直接点击网址时得到正确的响应,请在执行ajax调用时尝试执行以下操作。它传递了期望从服务器返回的内容类型。
function init() {
var url = "profile/getavatar";
$.ajax({
url : url,
dataType: "json"
}).then(function(data) {
avatarLink = data;
loadAvatar(avatarLink);
});
function loadAvatar(avatarLink){
$("#userAvatar").attr("src", avatarLink);
}
}
答案 1 :(得分:0)
如果您使用的是spring 4,请确保您的依赖库中有Jakson jar。框架将自动将内容协商器作为JSON获取,并在后台找到Jakson jar以将JSON传输到服务器并从服务器获取JSON数据
使用JAXB jar,以防您需要将XML作为内容协商者处理。