GVKun编程网logo

Spring MVC,在普通请求中强制JSON响应(spring mvc 请求)

9

本篇文章给大家谈谈SpringMVC,在普通请求中强制JSON响应,以及springmvc请求的知识点,同时本文还将给你拓展5.学习springmvc响应json数据、asp.net-mvc-3–MV

本篇文章给大家谈谈Spring MVC,在普通请求中强制JSON响应,以及spring mvc 请求的知识点,同时本文还将给你拓展5.学习springmvc响应json数据、asp.net-mvc-3 – MVC 3 json请求应该在异常时接收json响应、JSON – Spring MVC:如何将json数据发布到spring MVC控制器、Spring 3.0使用Jackson消息转换器进行JSON响应等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Spring MVC,在普通请求中强制JSON响应(spring mvc 请求)

Spring MVC,在普通请求中强制JSON响应(spring mvc 请求)

我使用的是Spring 3.0.6,我有一个控制器用于将文件上传到服务器.我正在使用脚本使用XmlHttpRequest上传支持它的浏览器,而其他浏览器提交(隐藏)多部分表单.但问题是,当提交表单时,它会发送以下标题:

Accept  text/html,application/xhtml+xml,*/*

我认为由于此标头,标有@ResponseBody的Controller回复响应已转换为XML而不是JSON.有没有办法在不破解表单提交请求的情况下解决这个问题?

最佳答案
您可以使用@RequestMapping强制使用JSON(produce =“application / json”).我不记得这是否在3.0中可用,但它肯定在3.1和3.2中可用.

正如其他人所说,杰克逊需要走上你的阶级路径.

5.学习springmvc响应json数据

5.学习springmvc响应json数据

一.配置不过滤静态资源文件:用来访问webapp中js,css,images文件

1.修改springmvc.xml

1     <!--配置前端控制器,用于设置哪些资源不拦截-->
2     <mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
3     <mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
4     <mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->

2.jsp:

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 
 3 <html>
 4 <head>
 5     <title>response</title>
 6     <script src="js/jquery.min.js"></script>
 7     <script>
 8         //页面加载,绑定点击事件
 9         $(function () {
10             $("#btn").click(function () {
11                 alert("hello btn");
12             });
13         });
14     </script>
15 </head>
16 <body>
17 
18 <a href="user/testString">testString</a> <br>
19 <a href="user/testVoid">testVoid</a>  <br>
20 <a href="user/testModelAndView">testModelAndView</a> <br>
21 <a href="user/testForwardOrRedirect">testForwardOrRedirect</a> <br>
22 
23 <button id="btn">发送ajax的请求</button>
24 </body>
25 </html>

展示:

二.客户端发送json请求给服务器端

jsp:

 1     <script>
 2         //页面加载,绑定点击事件
 3         $(function () {
 4             $("#btn").click(function () {
 5                 // alert("hello btn");
 6 
 7                 //发送ajax请求
 8                 $.ajax({
 9                     //编写json格式数据,设置属性值
10                     url:"user/testAjax",
11                     contentType:"application/json;charset=UTF-8",
12                     data:''{"username":"哈哈","password":"123","age":30}'',
13                     dataType:"json",
14                     type:"post",
15                     success:function (data) {
16                         //data服务器响应的json的数据,进行解析
17                     }
18                 })
19             });
20         });
21     </script>

方法:

 1     /**
 2      * 模拟Ajax异步请求响应,RequestBody 获得请求体数据
 3      * @param body
 4      */
 5     @RequestMapping("/testAjax")
 6     public void testAjax(@RequestBody String body){
 7 
 8         System.out.println("testAjax执行了...");
 9 
10         System.out.println(body);
11     }

执行结果:

三.服务器返回json给客户端

首先需要修改pom.xml导入jackson的jar包用于解析和封装json数据:

 1         <dependency>
 2             <groupId>com.fasterxml.jackson.core</groupId>
 3             <artifactId>jackson-databind</artifactId>
 4             <version>2.9.0</version>
 5         </dependency>
 6         <dependency>
 7             <groupId>com.fasterxml.jackson.core</groupId>
 8             <artifactId>jackson-core</artifactId>
 9             <version>2.9.0</version>
10         </dependency>
11         <dependency>
12             <groupId>com.fasterxml.jackson.core</groupId>
13             <artifactId>jackson-annotations</artifactId>
14             <version>2.9.0</version>
15         </dependency>

jsp:

 1     <script>
 2         //页面加载,绑定点击事件
 3         $(function () {
 4             $("#btn").click(function () {
 5                 // alert("hello btn");
 6 
 7                 //发送ajax请求
 8                 $.ajax({
 9                     //编写json格式数据,设置属性值
10                     url:"user/testAjax",
11                     contentType:"application/json;charset=UTF-8",
12                     data:''{"username":"哈哈","password":"123","age":30}'',
13                     dataType:"json",
14                     type:"post",
15                     success:function (data) {
16                         //data服务器响应的json的数据,进行解析
17                         alert(data.toString());
18 
19                         alert(data.username);
20                         alert(data.password);
21                         alert(data.age);
22                     }
23                 })
24             });
25         });
26     </script>

方法:

 1     /**
 2      * 模拟Ajax异步请求响应,RequestBody:获得请求体数据,ResponseBody:服务器响应数据
 3      *
 4      * @param user
 5      */
 6     @RequestMapping("/testAjax")
 7     public @ResponseBody User testAjax(@RequestBody User user) {
 8 
 9         System.out.println("testAjax执行了...");
10 
11         //客户端发送ajax请求的数据,通过导入jackson的jar包将json数据转换为JavaBean对象user
12         System.out.println(user.toString());
13 
14         //模拟数据库查询
15         user.setUsername("小美");
16         user.setAge(55);
17 
18         //服务器返回给客户端数据
19         return user;
20     }

展示:

 

asp.net-mvc-3 – MVC 3 json请求应该在异常时接收json响应

asp.net-mvc-3 – MVC 3 json请求应该在异常时接收json响应

我正在寻找一个好的/智能/干净的方式来全局处理错误,这样如果请求是Json并且发生异常,结果应该是json而不是html.

寻找现有的解决方案或如何建立自己的一些信息.

解决方法

一种常见的方法是编写自定义异常过滤器:

public class MyErrorHandlerAttribute : Filterattribute,IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        filterContext.ExceptionHandled = true;
        filterContext.Result = new JsonResult
        {
            Data = new { success = false,error = filterContext.Exception.ToString() },JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
    }
}

可以在Global.asax中注册为全局过滤器.然后简单地查询一些动作:

$.getJSON('/someController/someAction',function (result) {
    if (!result.success) {
        alert(result.error);
    } else {
        // handle the success
    }
});

JSON – Spring MVC:如何将json数据发布到spring MVC控制器

JSON – Spring MVC:如何将json数据发布到spring MVC控制器

我在将jsp数据从jsp发布到控制器时遇到问题.我每次尝试都会收到ajax错误错误请求.我是JSON的新手,我真的不知道我做错了什么.我搜索并尝试了一些我可以在这个网站找到的样本,但我仍然有问题.

在我的控制器中:

@RequestMapping (method = RequestMethod.POST,headers ={"Accept=application/json"},value = "/form")
public String postJournalEntry (@RequestParam ("json") String json,Model model) {
    System.out.println(json);
    return "successfullySaved";
}

在我的jsp中:

$("#btnPostGlEntry").click(function () {
    var glEntries = '{"glEntries":[{"generalLedgerId":"1"},{"accountId":"4"},{"amount":"344.44"},{"description":"Test Entry"},{"debit":"Yes"}]}';
    $.ajax({
        type: "POST",contentType: "application/json",dataType: "json",url: contextpath + "/generalLedger/journalEntries/form",data : JSON.stringify(glEntries),success: function(data) {
            alert("Success!!!");
        },error: function (jqXHR,textStatus,errorThrown) {
            alert(jqXHR + " : " + textStatus + " : " + errorThrown);
        }
    });
});

注意:我甚至不确定我的控制器中的功能是否正确.我认为我的控制器和我的ajax是错误的.请帮忙.

最佳答案
如果你想将你的JSON反序列化到某个类中,那么你必须定义这样的方法(并且不要忘记添加jsonConverter,如前面的答案):

.... method(@RequestBody MyClass data){ ... }

但是,如果您希望您的方法接受JSON作为String而不是这样做:

.... method(@RequestBody String json){ ... }

所以,基本上,如果你发布JSON,这意味着JSON不是一个参数,它是请求的主体.最后你必须使用@RequestBody注释,而不是@RequestParam.

你可以在这里找到Spring Mvc和JSON的精彩视频教程:sites.google.com/site/upida4j/example

Spring 3.0使用Jackson消息转换器进行JSON响应

Spring 3.0使用Jackson消息转换器进行JSON响应

如何解决Spring 3.0使用Jackson消息转换器进行JSON响应?

你需要以下内容:

  1. 设置注解驱动的编程模型:将<mvc:annotation-driven />在spring.xml
  2. 将jaskson jar(Maven artifactId为org.codehaus.jackson:jackson-mapper-asl)放在classpath中。
  3. 用作以下用途:
@RequestMapping(method = { RequestMethod.GET, RequestMethod.POST })
public @ResponseBody Foo method(@Valid Request request, BindingResult result){
return new Foo(3,4)
}

这对我有用。

请注意,

1.@ResponseBody 适用于返回类型,而不是方法定义。 2. 你需要@RequestMapping注释,以便Spring可以检测到它。

解决方法

我将我的messageconverter配置为Jackson的

class Foo{int x; int y}

并在控制器中

@ResponseBody
public Foo method(){
   return new Foo(3,4)
}

从该即时消息期望从服务器返回JSON字符串{x:‘3’,y:‘4’},而无需任何其他配置。但是收到对我的ajax请求的404错误响应

如果使用@ResponseBody注释该方法,则将返回类型写入响应HTTP正文。该返回值将使用HttpMessageConverters转换为声明的方法参数类型。

我错了吗 ?还是我自己使用序列化器将我的response对象转换为Json字符串,然后将该字符串作为响应返回(我可以正确地进行字符串响应),还是应该进行其他配置?像为Foo类添加注释

这是我的conf.xml

<bean id="jacksonMessageConverter">
  <bean>
<property name="messageConverters">
  <list>
    <ref bean="jacksonMessageConverter"/>
  </list>
</property>

关于Spring MVC,在普通请求中强制JSON响应spring mvc 请求的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于5.学习springmvc响应json数据、asp.net-mvc-3 – MVC 3 json请求应该在异常时接收json响应、JSON – Spring MVC:如何将json数据发布到spring MVC控制器、Spring 3.0使用Jackson消息转换器进行JSON响应的相关知识,请在本站寻找。

本文标签: