@JsonView
जैक्सन JSON प्रोसेसर में v1.4 से already supported है।
न्यू संपादित करें: जैक्सन 1.9.12
के लिए अपडेट किया गया v1.8.4 documentation समारोह मैं writeValueUsingView
उपयोग कर रहा था के अनुसार अब है पदावनतउपयोग ObjectMapper.viewWriter (java.lang.Class) के बजाय और नरक; हालांकि यह भी से 1.9 के बाद, लेखक WithView (कक्षा) के बजाय का उपयोग करें! (V1.9.9 documentation देखें)
तो यहाँ एक अद्यतन उदाहरण, स्प्रिंग 3.2.0 और जैक्सन 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";
}
}
पिछला संपादित में परिणाम होगा: आप 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);
}
यदि आप जैक्सन> = 1.7 का उपयोग कर रहे हैं तो आपको लगता है कि @JSONFilter
आपकी आवश्यकताओं के अनुरूप बेहतर है।
सिर्फ आपकी जानकारी के लिए, मैं अंत में अपना खुद का विचार लिखना समाप्त कर दिया – Erik