我使用下面的bean定義,使我的春天應用程序在JSON使用@JsonView與Spring MVC的
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
談論是否有可能與此消息變換bean來使用@JsonView註解?
我使用下面的bean定義,使我的春天應用程序在JSON使用@JsonView與Spring MVC的
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
談論是否有可能與此消息變換bean來使用@JsonView註解?
@JsonView
是already supported從傑克遜JSON處理器從v1.4開始。
新編輯:更新了傑克遜1.9.12
按照v1.8.4 documentation功能我用writeValueUsingView
現在棄用使用ObjectMapper.viewWriter(java.lang.Class中),而不是&hellip;不過那也是已棄用從1.9開始,用writerWithView(Class)代替! (見v1.9.9 documentation)
所以這裏是一個更新的例子,使用Spring 3.2.0和傑克遜1.9.12,因爲它使用的是.writerWithView(Views.Public.class)
僅返回{id: 1}
而不是擴展{name: "name"}
測試。切換到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";
}
}
一個編輯:您需要實例化ObjectMapper
和使用自定義視圖,如圖here寫出來的對象,或在這個例子:
定義的看法:
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;
}
使用意見:
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);
}
如果您使用的是Jackson> = 1.7,您可能會發現@JSONFilter
更適合您的需求。
是的,但是Mapper如何知道要呈現哪個視圖? – Erik 2011-04-26 09:41:34
我不認爲該映射器可以知道。你必須自己寫對象。我編輯了我的答案,但也添加了一個鏈接到'@ JSONFilter',這可能對你更好。由於我的答案中的示例將始終寫入JSON格式的輸出。如果你需要支持其他輸出格式,這不適合你。 – andyb 2011-04-26 10:06:50
請投它作爲一個新功能:https://jira.springsource.org/browse/SPR-7156?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel – 2013-03-20 11:31:28
只是爲了您的信息,我終於寫了我自己的觀點 – Erik 2011-06-20 15:00:01