我希望使用json将一个布尔值从我的控制器传递给javascript,但由于我对spring还不熟悉,所以找不到一种方法。
在使用servlet时,我们写道:
response.getWriter().println(somevalue)
并且可以使用ajax接收somevalue
。这里我的控制器方法是:
@RequestMapping(value = REGISTERACTION , method = RequestMethod.POST)
@ResponseBody
public boolean RegisterUser(@ModelAttribute("register") Register register,HttpServletRequest request, HttpServletResponse response)
{
boolean Registrationsuccess = userService.RegisterUser(register);
return Registrationsuccess;
}
因此,这里的布尔变量是Registrationsuccess
,我想将它发送到js文件,并使用ajax接收它。
在我的javascipt函数中,它使用来调用onsubmit事件->
function AccountExists()
{
$.ajax({
type: 'POST',
url: 'registerProcess',
success: function(data){
let detail = JSON.parse(data);
if( data == true)
alert("Success");
else
alert("Not ");
}
});
}
出错--
根据在请求中接收的主动协商头字段,目标资源不具有用户代理可以接受的当前表示,并且服务器不愿意提供默认表示。
发布于 2019-10-17 22:40:02
您需要使用ResponseEntity
和@RestController
来进行JSON响应。
注意:@RestController
包括注释@Controller
和@ResponseBody
。
试着用这个:
@RestController
@RequestMapping("controller")
public class Controller {
@PostMapping("REGISTERACTION")
public ResponseEntity<Boolean> RegisterUser(@ModelAttribute("register") Register register)
{
Boolean registrationSuccess = userService.RegisterUser(register);
return new ResponseEntity<Boolean>(registrationSuccess , HttpStatus.OK);
}
}
发布于 2019-10-17 22:36:23
尝试在控制器的方法中使用@ResponseBody注释。并将方法的返回类型更改为布尔值,然后返回Registrationsuccess而不是ModelAndView。
发布于 2019-10-17 22:45:33
您可以使用2种方法来实现这一点。
方法1:集模型属性和使用在jsp
上可以找到的表达式语言
model.addAttribute("test",true);
在Jsp页面中
${test}
方法2:如果您发送的是ajax请求而不是ModelAndView
,创建一个对象,设置任何属性boolean
并从方法@ResponseBody
注释返回对象,您将在Ajax响应中获得json。
@RequestMapping(value = REGISTERACTION , method = RequestMethod.POST)
public @ResponseBody MyCustomObject RegisterUser(@ModelAttribute("register") Register register,HttpServletRequest request, HttpServletResponse response)
{
boolean Registrationsuccess = userService.RegisterUser(register);
MyCustomObject cusobj=new MyCustomObject();
cusobj.setStatus(true);
return cusobj;
}
不管您编写了什么代码,它都不会返回json(基本上是表单提交方法),所以您必须使用第一种方法。
https://stackoverflow.com/questions/58445095
复制