Eri*_*rik 8 java spring json spring-mvc java-ee
我正在使用以下bean定义来使我的spring应用程序在JSON中进行通信
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
Run Code Online (Sandbox Code Playgroud)
这个消息转换器bean是否可以使用@JsonView注释?
and*_*dyb 18
@JsonView是已经支持在杰克逊JSON处理器从V1.4开始.
新编辑:针对Jackson 1.9.12更新
按照v1.8.4 文档我所用的功能writeValueUsingView现在已过时 使用ObjectMapper.viewWriter(java.lang.Class中),而不是 ......不过这也被弃用 自1.9,使用writerWithView(类),而不是!(见v1.9.9 文件)
所以这是一个更新的例子,使用Spring 3.2.0和Jackson 1.9.12测试,它只返回{id: 1}而不是扩展,{name: "name"}因为它使用的是.writerWithView(Views.Public.class).切换到Views.ExtendPublic.class将导致{"id":1,"name":"name"}
package com.demo.app;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.codehaus.jackson.map.annotate.JsonView;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ObjectWriter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
public class DemoController {
private final ObjectMapper objectMapper = new ObjectMapper();
@RequestMapping(value="/jsonOutput")
@ResponseBody
public String myObject(HttpServletResponse response) throws IOException {
ObjectWriter objectWriter = objectMapper.writerWithView(Views.Public.class);
return objectWriter.writeValueAsString(new MyObject());
}
public static class Views {
static class Public {}
static class ExtendPublic extends Public {}
}
public class MyObject {
@JsonView(Views.Public.class) Integer id = 1;
@JsonView(Views.ExtendPublic.class) String name = "name";
}
}
Run Code Online (Sandbox Code Playgroud)
上一页编辑:您需要实例化ObjectMapper和使用自定义视图,如图写出来的物体在这里,或在这个例子:
定义视图:
class Views {
static class Public {}
static class ExtendedPublic extends PublicView {}
...
}
public class Thing {
@JsonView(Views.Public.class) Integer id;
@JsonView(Views.ExtendPublic.class) String name;
}
Run Code Online (Sandbox Code Playgroud)
使用视图:
private final ObjectMapper objectMapper = new ObjectMapper();
@RequestMapping(value = "/thing/{id}")
public void getThing(@PathVariable final String id, HttpServletResponse response) {
Thing thing = new Thing();
objectMapper.writeValueUsingView(response.getWriter(), thing, Views.ExtendPublic.class);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用Jackson> = 1.7,您可能会发现@JSONFilter更适合您的需求.
| 归档时间: |
|
| 查看次数: |
30592 次 |
| 最近记录: |