Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Spring 如何从控制器发送JSON响应?_Spring_Spring Mvc - Fatal编程技术网

Spring 如何从控制器发送JSON响应?

Spring 如何从控制器发送JSON响应?,spring,spring-mvc,Spring,Spring Mvc,我想使用json将一个布尔值从我的控制器传递到javascript,但找不到方法,因为我是SpringMVC新手 在使用servlet时,我们写道: response.getWriter().println(somevalue) 可以使用ajax接收somevalue。 这里我的控制器方法是: @RequestMapping(value = REGISTERACTION , method = RequestMethod.POST) @ResponseBody public boolean Re

我想使用json将一个布尔值从我的控制器传递到javascript,但找不到方法,因为我是SpringMVC新手

在使用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函数中,使用onsubmitevent-->

}

获取错误--


根据请求中接收到的主动协商标头字段,目标资源没有用户代理可以接受的当前表示形式,服务器不愿意提供默认表示形式。

尝试在控制器的方法中使用@ResponseBody注释。并将方法的返回类型更改为Boolean,然后返回Registrationsuccess而不是ModelAndView。

对于JSON响应,您需要使用
ResponseEntity
@RestController

注:
@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);
    }

}
@RestController
@请求映射(“控制器”)
公共类控制器{
@后映射(“注册操作”)
公共响应注册器(@modeldattribute(“注册器”)注册器)
{
布尔registrationSuccess=userService.RegisterUser(寄存器);
返回新的响应状态(registrationSuccess,HttpStatus.OK);
}
}

您可以使用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(基本上是表单提交方法)因此,您必须使用第一种方法。

您是否尝试将返回类型更改为
布尔值
,并返回
注册成功
,而不是
模型和视图
?请检查编辑@kartik@ResponseBody注释和ResponseEntity之间的区别是什么@Anish@VidhiAgarwal
@RestController
包括注释
@Controller
@ResponseBody
@VidhiAgarwal
@ResponseBody
它将对象转换为合适的web响应,如JSON或XML。你可以设置它。ResponseEntity是完整的HTTP响应。您可以在其中设置各种内容,如状态代码、内容类型等。。请查看文档以了解更多信息。我已经编辑了我的问题。你能检查一下吗@Anish@VidhiAgarwal请看这个答案--它将帮助您。我想发送javascipt函数,并根据这个布尔值在我的jsp页面中发送警报@vivekdubeyI已编辑问题..请检查@vivekdubey@VidhiAgarwal使用第二种方法可以做到这一点
@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;
}