类org.springframework.http.converter.json.MappingJacksonValue源码实例Demo

下面列出了怎么用org.springframework.http.converter.json.MappingJacksonValue的API类实例代码及写法,或者点击链接到github查看源代码。

/**
 * Filter and optionally wrap the model in {@link MappingJacksonValue} container.
 * @param model the model, as passed on to {@link #renderMergedOutputModel}
 * @param request current HTTP request
 * @return the wrapped or unwrapped value to be rendered
 */
protected Object filterAndWrapModel(Map<String, Object> model, HttpServletRequest request) {
	Object value = filterModel(model);
	Class<?> serializationView = (Class<?>) model.get(JsonView.class.getName());
	FilterProvider filters = (FilterProvider) model.get(FilterProvider.class.getName());
	if (serializationView != null || filters != null) {
		MappingJacksonValue container = new MappingJacksonValue(value);
		if (serializationView != null) {
			container.setSerializationView(serializationView);
		}
		if (filters != null) {
			container.setFilters(filters);
		}
		value = container;
	}
	return value;
}
 
/**
 * Write the actual JSON content to the stream.
 * @param stream the output stream to use
 * @param object the value to be rendered, as returned from {@link #filterModel}
 * @throws IOException if writing failed
 */
protected void writeContent(OutputStream stream, Object object) throws IOException {
	JsonGenerator generator = this.objectMapper.getFactory().createGenerator(stream, this.encoding);
	writePrefix(generator, object);

	Object value = object;
	Class<?> serializationView = null;
	FilterProvider filters = null;

	if (value instanceof MappingJacksonValue) {
		MappingJacksonValue container = (MappingJacksonValue) value;
		value = container.getValue();
		serializationView = container.getSerializationView();
		filters = container.getFilters();
	}

	ObjectWriter objectWriter = (serializationView != null ?
			this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
	if (filters != null) {
		objectWriter = objectWriter.with(filters);
	}
	objectWriter.writeValue(generator, value);

	writeSuffix(generator, object);
	generator.flush();
}
 
@Test
public void jsonView() throws Exception {
	MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
	JacksonViewBean bean = new JacksonViewBean();
	bean.setWithView1("with");
	bean.setWithView2("with");
	bean.setWithoutView("without");

	MappingJacksonValue jacksonValue = new MappingJacksonValue(bean);
	jacksonValue.setSerializationView(MyJacksonView1.class);
	this.converter.write(jacksonValue, null, outputMessage);

	String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8);
	assertThat(result, containsString("<withView1>with</withView1>"));
	assertThat(result, not(containsString("<withView2>with</withView2>")));
	assertThat(result, not(containsString("<withoutView>without</withoutView>")));
}
 
/**
 * Filter and optionally wrap the model in {@link MappingJacksonValue} container.
 * @param model the model, as passed on to {@link #renderMergedOutputModel}
 * @param request current HTTP request
 * @return the wrapped or unwrapped value to be rendered
 */
protected Object filterAndWrapModel(Map<String, Object> model, HttpServletRequest request) {
	Object value = filterModel(model);
	Class<?> serializationView = (Class<?>) model.get(JsonView.class.getName());
	FilterProvider filters = (FilterProvider) model.get(FilterProvider.class.getName());
	if (serializationView != null || filters != null) {
		MappingJacksonValue container = new MappingJacksonValue(value);
		if (serializationView != null) {
			container.setSerializationView(serializationView);
		}
		if (filters != null) {
			container.setFilters(filters);
		}
		value = container;
	}
	return value;
}
 
/**
 * Write the actual JSON content to the stream.
 * @param stream the output stream to use
 * @param object the value to be rendered, as returned from {@link #filterModel}
 * @throws IOException if writing failed
 */
protected void writeContent(OutputStream stream, Object object) throws IOException {
	JsonGenerator generator = this.objectMapper.getFactory().createGenerator(stream, this.encoding);
	writePrefix(generator, object);

	Object value = object;
	Class<?> serializationView = null;
	FilterProvider filters = null;

	if (value instanceof MappingJacksonValue) {
		MappingJacksonValue container = (MappingJacksonValue) value;
		value = container.getValue();
		serializationView = container.getSerializationView();
		filters = container.getFilters();
	}

	ObjectWriter objectWriter = (serializationView != null ?
			this.objectMapper.writerWithView(serializationView) : this.objectMapper.writer());
	if (filters != null) {
		objectWriter = objectWriter.with(filters);
	}
	objectWriter.writeValue(generator, value);

	writeSuffix(generator, object);
	generator.flush();
}
 
@Test
public void jsonView() throws Exception {
	MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
	JacksonViewBean bean = new JacksonViewBean();
	bean.setWithView1("with");
	bean.setWithView2("with");
	bean.setWithoutView("without");

	MappingJacksonValue jacksonValue = new MappingJacksonValue(bean);
	jacksonValue.setSerializationView(MyJacksonView1.class);
	this.converter.write(jacksonValue, null, outputMessage);

	String result = outputMessage.getBodyAsString(StandardCharsets.UTF_8);
	assertThat(result, containsString("<withView1>with</withView1>"));
	assertThat(result, not(containsString("<withView2>with</withView2>")));
	assertThat(result, not(containsString("<withoutView>without</withoutView>")));
}
 
源代码7 项目: learning-taotaoMall   文件: UserController.java
@RequestMapping("/token/{token}")
public Object getUserByToken(@PathVariable String token, String callback) {
	TaotaoResult result = null;
	try {
		result = userService.getUserByToken(token);
	} catch (Exception e) {
		e.printStackTrace();
		result = TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
	}

	//判断是否为jsonp调用
	if (StringUtils.isBlank(callback)) {
		return result;
	} else {
		MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
		mappingJacksonValue.setJsonpFunction(callback);
		return mappingJacksonValue;
	}

}
 
源代码8 项目: lams   文件: MappingJackson2JsonView.java
@Override
protected Object filterAndWrapModel(Map<String, Object> model, HttpServletRequest request) {
	Object value = super.filterAndWrapModel(model, request);
	String jsonpParameterValue = getJsonpParameterValue(request);
	if (jsonpParameterValue != null) {
		if (value instanceof MappingJacksonValue) {
			((MappingJacksonValue) value).setJsonpFunction(jsonpParameterValue);
		}
		else {
			MappingJacksonValue container = new MappingJacksonValue(value);
			container.setJsonpFunction(jsonpParameterValue);
			value = container;
		}
	}
	return value;
}
 
源代码9 项目: lams   文件: AbstractJsonpResponseBodyAdvice.java
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
		MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {

	HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest();

	for (String name : this.jsonpQueryParamNames) {
		String value = servletRequest.getParameter(name);
		if (value != null) {
			if (!isValidJsonpQueryParam(value)) {
				if (logger.isDebugEnabled()) {
					logger.debug("Ignoring invalid jsonp parameter value: " + value);
				}
				continue;
			}
			MediaType contentTypeToUse = getContentType(contentType, request, response);
			response.getHeaders().setContentType(contentTypeToUse);
			bodyContainer.setJsonpFunction(value);
			break;
		}
	}
}
 
@Override
protected Object filterAndWrapModel(Map<String, Object> model, HttpServletRequest request) {
	Object value = super.filterAndWrapModel(model, request);
	String jsonpParameterValue = getJsonpParameterValue(request);
	if (jsonpParameterValue != null) {
		if (value instanceof MappingJacksonValue) {
			((MappingJacksonValue) value).setJsonpFunction(jsonpParameterValue);
		}
		else {
			MappingJacksonValue container = new MappingJacksonValue(value);
			container.setJsonpFunction(jsonpParameterValue);
			value = container;
		}
	}
	return value;
}
 
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
		MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {

	HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest();

	for (String name : this.jsonpQueryParamNames) {
		String value = servletRequest.getParameter(name);
		if (value != null) {
			if (!isValidJsonpQueryParam(value)) {
				if (logger.isDebugEnabled()) {
					logger.debug("Ignoring invalid jsonp parameter value: " + value);
				}
				continue;
			}
			MediaType contentTypeToUse = getContentType(contentType, request, response);
			response.getHeaders().setContentType(contentTypeToUse);
			bodyContainer.setJsonpFunction(value);
			break;
		}
	}
}
 
@Test
public void jsonView() throws Exception {
	MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
	JacksonViewBean bean = new JacksonViewBean();
	bean.setWithView1("with");
	bean.setWithView2("with");
	bean.setWithoutView("without");

	MappingJacksonValue jacksonValue = new MappingJacksonValue(bean);
	jacksonValue.setSerializationView(MyJacksonView1.class);
	this.writeInternal(jacksonValue, outputMessage);

	String result = outputMessage.getBodyAsString(Charset.forName("UTF-8"));
	assertThat(result, containsString("<withView1>with</withView1>"));
	assertThat(result, not(containsString("<withView2>with</withView2>")));
	assertThat(result, not(containsString("<withoutView>without</withoutView>")));
}
 
源代码13 项目: spring-boot-jpa   文件: PageResponseBodyAdvisor.java
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer,
		MediaType contentType, MethodParameter returnType,
		ServerHttpRequest request, ServerHttpResponse response) {

	Page<?> page = ((Page<?>) bodyContainer.getValue());

	response.getHeaders().add(CUSTOM_HEADER_META_PAGINATION,
			String.format(PAGE_METADATA_FMT, page.getNumber(), page.getSize(),
					page.getTotalElements(), page.getTotalPages(), page.isFirst(),
					page.isLast()));

	getHttpHeaderLinksString(request, page)
			.filter(StringUtils::isNotEmpty)
			.ifPresent(s -> response.getHeaders().add(HttpHeaders.LINK, s));

	// finally, strip out the actual content and replace it as the body value
	bodyContainer.setValue(page.getContent());
}
 
源代码14 项目: onetwo   文件: ExtJackson2HttpMessageConverter.java
protected Object filterAndWrapModel(Object value, HttpOutputMessage outputMessage, HttpServletRequest request) {
	String jsonpParameterValue = getJsonpParameterValue(request);
	if (jsonpParameterValue != null) {
		if (value instanceof MappingJacksonValue) {
			((MappingJacksonValue) value).setJsonpFunction(jsonpParameterValue);
		}
		else {
			MappingJacksonValue container = new MappingJacksonValue(value);
			container.setJsonpFunction(jsonpParameterValue);
			value = container;
		}
		outputMessage.getHeaders().setContentType(MediaType.parseMediaType("application/javascript"));
	}
	if (value instanceof Optional) {
		Optional<?> opt = (Optional<?>) value;
		value = opt.orElse(null);
	}
	return value;
}
 
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
                                       MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {
    if (SecurityContextHolder.getContext().getAuthentication() != null
            && SecurityContextHolder.getContext().getAuthentication().getAuthorities() != null) {
        Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities();
        List<Class> jsonViews = authorities.stream()
                .map(GrantedAuthority::getAuthority)
                .map(AppConfig.Role::valueOf)
                .map(View.MAPPING::get)
                .collect(Collectors.toList());
        if (jsonViews.size() == 1) {
            bodyContainer.setSerializationView(jsonViews.get(0));
            return;
        }
        throw new IllegalArgumentException("Ambiguous @JsonView declaration for roles "+ authorities.stream().map(GrantedAuthority::getAuthority).collect(Collectors.joining(",")));
    }
}
 
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
		MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {

	JsonView ann = returnType.getMethodAnnotation(JsonView.class);
	Assert.state(ann != null, "No JsonView annotation");

	Class<?>[] classes = ann.value();
	if (classes.length != 1) {
		throw new IllegalArgumentException(
				"@JsonView only supported for response body advice with exactly 1 class argument: " + returnType);
	}

	bodyContainer.setSerializationView(classes[0]);
}
 
@Override
@Nullable
public final Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType,
		MediaType contentType, Class<? extends HttpMessageConverter<?>> converterType,
		ServerHttpRequest request, ServerHttpResponse response) {

	if (body == null) {
		return null;
	}
	MappingJacksonValue container = getOrCreateContainer(body);
	beforeBodyWriteInternal(container, contentType, returnType, request, response);
	return container;
}
 
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
		MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {

	int status = ((ServletServerHttpResponse) response).getServletResponse().getStatus();
	response.setStatusCode(HttpStatus.OK);

	Map<String, Object> map = new LinkedHashMap<>();
	map.put("status", status);
	map.put("message", bodyContainer.getValue());
	bodyContainer.setValue(map);
}
 
@Test
public void jsonPostForObjectWithJacksonView() throws URISyntaxException {
	HttpHeaders entityHeaders = new HttpHeaders();
	entityHeaders.setContentType(new MediaType("application", "json", StandardCharsets.UTF_8));
	MySampleBean bean = new MySampleBean("with", "with", "without");
	MappingJacksonValue jacksonValue = new MappingJacksonValue(bean);
	jacksonValue.setSerializationView(MyJacksonView1.class);
	HttpEntity<MappingJacksonValue> entity = new HttpEntity<>(jacksonValue, entityHeaders);
	String s = template.postForObject(baseUrl + "/jsonpost", entity, String.class);
	assertTrue(s.contains("\"with1\":\"with\""));
	assertFalse(s.contains("\"with2\":\"with\""));
	assertFalse(s.contains("\"without\":\"without\""));
}
 
源代码20 项目: feiqu-opensource   文件: AliyunOssController.java
/**
 * 签名生成
 * @param callback 跨域请求
 * @return jsonp
 */
@GetMapping("/policy")
@ResponseBody
@CrossOrigin(origins = "*", methods = RequestMethod.GET) // 该注解不支持JDK1.7
public Object policy(@RequestParam(required = false) String callback) {
	LOGGER.info("AliyunOssController-policy:"+callback);
	JSONObject result = aliyunOssService.policy();
	if (StringUtils.isBlank(callback)) {
		return result;
	}
	MappingJacksonValue jsonp = new MappingJacksonValue(result);
	jsonp.setValue(callback);
	return jsonp;
}
 
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
		MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {

	JsonView ann = returnType.getMethodAnnotation(JsonView.class);
	Assert.state(ann != null, "No JsonView annotation");

	Class<?>[] classes = ann.value();
	if (classes.length != 1) {
		throw new IllegalArgumentException(
				"@JsonView only supported for response body advice with exactly 1 class argument: " + returnType);
	}

	bodyContainer.setSerializationView(classes[0]);
}
 
@Override
@Nullable
public final Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType,
		MediaType contentType, Class<? extends HttpMessageConverter<?>> converterType,
		ServerHttpRequest request, ServerHttpResponse response) {

	if (body == null) {
		return null;
	}
	MappingJacksonValue container = getOrCreateContainer(body);
	beforeBodyWriteInternal(container, contentType, returnType, request, response);
	return container;
}
 
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
		MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {

	int status = ((ServletServerHttpResponse) response).getServletResponse().getStatus();
	response.setStatusCode(HttpStatus.OK);

	Map<String, Object> map = new LinkedHashMap<>();
	map.put("status", status);
	map.put("message", bodyContainer.getValue());
	bodyContainer.setValue(map);
}
 
@Test
public void jsonPostForObjectWithJacksonView() throws URISyntaxException {
	HttpHeaders entityHeaders = new HttpHeaders();
	entityHeaders.setContentType(new MediaType("application", "json", StandardCharsets.UTF_8));
	MySampleBean bean = new MySampleBean("with", "with", "without");
	MappingJacksonValue jacksonValue = new MappingJacksonValue(bean);
	jacksonValue.setSerializationView(MyJacksonView1.class);
	HttpEntity<MappingJacksonValue> entity = new HttpEntity<>(jacksonValue, entityHeaders);
	String s = template.postForObject(baseUrl + "/jsonpost", entity, String.class);
	assertTrue(s.contains("\"with1\":\"with\""));
	assertFalse(s.contains("\"with2\":\"with\""));
	assertFalse(s.contains("\"without\":\"without\""));
}
 
源代码25 项目: halo   文件: CommonResultControllerAdvice.java
@Override
@NonNull
public final Object beforeBodyWrite(@Nullable Object body, MethodParameter returnType,
                                    MediaType contentType, Class<? extends HttpMessageConverter<?>> converterType,
                                    ServerHttpRequest request, ServerHttpResponse response) {
    MappingJacksonValue container = getOrCreateContainer(body);
    // The contain body will never be null
    beforeBodyWriteInternal(container, contentType, returnType, request, response);
    return container;
}
 
源代码26 项目: lams   文件: MappingJackson2JsonView.java
@Override
protected void writePrefix(JsonGenerator generator, Object object) throws IOException {
	if (this.jsonPrefix != null) {
		generator.writeRaw(this.jsonPrefix);
	}

	String jsonpFunction = null;
	if (object instanceof MappingJacksonValue) {
		jsonpFunction = ((MappingJacksonValue) object).getJsonpFunction();
	}
	if (jsonpFunction != null) {
		generator.writeRaw("/**/");
		generator.writeRaw(jsonpFunction + "(" );
	}
}
 
源代码27 项目: lams   文件: MappingJackson2JsonView.java
@Override
protected void writeSuffix(JsonGenerator generator, Object object) throws IOException {
	String jsonpFunction = null;
	if (object instanceof MappingJacksonValue) {
		jsonpFunction = ((MappingJacksonValue) object).getJsonpFunction();
	}
	if (jsonpFunction != null) {
		generator.writeRaw(");");
	}
}
 
源代码28 项目: lams   文件: AbstractJackson2View.java
/**
 * Filter and optionally wrap the model in {@link MappingJacksonValue} container.
 * @param model the model, as passed on to {@link #renderMergedOutputModel}
 * @param request current HTTP request
 * @return the wrapped or unwrapped value to be rendered
 */
protected Object filterAndWrapModel(Map<String, Object> model, HttpServletRequest request) {
	Object value = filterModel(model);
	Class<?> serializationView = (Class<?>) model.get(JsonView.class.getName());
	FilterProvider filters = (FilterProvider) model.get(FilterProvider.class.getName());
	if (serializationView != null || filters != null) {
		MappingJacksonValue container = new MappingJacksonValue(value);
		container.setSerializationView(serializationView);
		container.setFilters(filters);
		value = container;
	}
	return value;
}
 
源代码29 项目: lams   文件: AbstractJackson2View.java
/**
 * Write the actual JSON content to the stream.
 * @param stream the output stream to use
 * @param object the value to be rendered, as returned from {@link #filterModel}
 * @throws IOException if writing failed
 */
protected void writeContent(OutputStream stream, Object object) throws IOException {
	JsonGenerator generator = this.objectMapper.getFactory().createGenerator(stream, this.encoding);

	writePrefix(generator, object);
	Class<?> serializationView = null;
	FilterProvider filters = null;
	Object value = object;

	if (value instanceof MappingJacksonValue) {
		MappingJacksonValue container = (MappingJacksonValue) value;
		value = container.getValue();
		serializationView = container.getSerializationView();
		filters = container.getFilters();
	}
	if (serializationView != null) {
		this.objectMapper.writerWithView(serializationView).writeValue(generator, value);
	}
	else if (filters != null) {
		this.objectMapper.writer(filters).writeValue(generator, value);
	}
	else {
		this.objectMapper.writeValue(generator, value);
	}
	writeSuffix(generator, object);
	generator.flush();
}
 
源代码30 项目: lams   文件: JsonViewResponseBodyAdvice.java
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
		MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {

	JsonView annotation = returnType.getMethodAnnotation(JsonView.class);
	Class<?>[] classes = annotation.value();
	if (classes.length != 1) {
		throw new IllegalArgumentException(
				"@JsonView only supported for response body advice with exactly 1 class argument: " + returnType);
	}
	bodyContainer.setSerializationView(classes[0]);
}
 
 类所在包
 同包方法