下面列出了怎么用com.fasterxml.jackson.core.JsonEncoding的API类实例代码及写法,或者点击链接到github查看源代码。
@Test
public void serialize()
throws IOException
{
logger.info("serialize: enter");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mapper.writeValue(outputStream, expected);
String actual = new String(outputStream.toByteArray(), JsonEncoding.UTF8.getJavaName());
logger.info("serialize: serialized text[{}]", actual);
assertEquals(expectedSerDeText, actual);
logger.info("serialize: exit");
}
@Test
public void serialize()
throws IOException
{
logger.info("serialize: enter");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mapper.writeValue(outputStream, expected);
String actual = new String(outputStream.toByteArray(), JsonEncoding.UTF8.getJavaName());
logger.info("serialize: serialized text[{}]", actual);
assertEquals(expectedSerDeText, actual);
logger.info("serialize: exit");
}
@Test
public void serialize()
throws IOException
{
logger.info("serialize: enter");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mapper.writeValue(outputStream, expected);
String actual = new String(outputStream.toByteArray(), JsonEncoding.UTF8.getJavaName());
logger.info("serialize: serialized text[{}]", actual);
assertEquals(expectedSerDeText, actual);
logger.info("serialize: exit");
}
public static JsonEncoding detectEncoding(File jsonFile) throws ManipulationException
{
try ( FileInputStream in = new FileInputStream( jsonFile ) )
{
byte[] inputBuffer = new byte[4];
in.read( inputBuffer );
IOContext ctxt = new IOContext( new BufferRecycler(), null, false );
ByteSourceJsonBootstrapper strapper = new ByteSourceJsonBootstrapper( ctxt, inputBuffer, 0,
4 );
JsonEncoding encoding = strapper.detectEncoding();
logger.debug( "Detected JSON encoding {} for file {}", encoding, jsonFile );
return encoding;
}
catch ( IOException e )
{
logger.error( "Unable to detect charset for file: {}", jsonFile, e );
throw new ManipulationException( "Unable to detect charset for file {}", jsonFile, e );
}
}
@Test
public void serialize()
throws Exception
{
logger.info("serialize: enter");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mapper.writeValue(outputStream, expected);
String actual = new String(outputStream.toByteArray(), JsonEncoding.UTF8.getJavaName());
logger.info("serialize: serialized text[{}]", actual);
assertEquals(expectedSerDeText, actual);
expected.close();
logger.info("serialize: exit");
}
@Test
public void serialize()
throws IOException
{
logger.info("serialize: enter");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mapper.writeValue(outputStream, expected);
String actual = new String(outputStream.toByteArray(), JsonEncoding.UTF8.getJavaName());
logger.info("serialize: serialized text[{}]", actual);
assertEquals(expectedSerDeText, actual);
logger.info("serialize: exit");
}
@Test
public void serialize()
throws IOException
{
logger.info("serialize: enter");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mapper.writeValue(outputStream, expected);
String actual = new String(outputStream.toByteArray(), JsonEncoding.UTF8.getJavaName());
logger.info("serialize: serialized text[{}]", actual);
assertEquals(expectedSerDeText, actual);
logger.info("serialize: exit");
}
@Test
public void serialize()
throws IOException
{
logger.info("serialize: enter");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mapper.writeValue(outputStream, expected);
String actual = new String(outputStream.toByteArray(), JsonEncoding.UTF8.getJavaName());
logger.info("serialize: serialized text[{}]", actual);
assertEquals(expectedSerDeText, actual);
logger.info("serialize: exit");
}
@Test
public void serialize()
throws IOException
{
logger.info("serialize: enter");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mapper.writeValue(outputStream, expected);
String actual = new String(outputStream.toByteArray(), JsonEncoding.UTF8.getJavaName());
logger.info("serialize: serialized text[{}]", actual);
assertEquals(expectedSerDeText, actual);
logger.info("serialize: exit");
}
private String getResponse(String query) throws IOException {
List<MockQueryHit> hits = hitMap.get(query);
if (hits == null) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
JsonGenerator g = new JsonFactory().createGenerator(out, JsonEncoding.UTF8);
writeResultStart(g, hits.size());
for (MockQueryHit hit : hits) {
writeHit(g, hit);
}
writeResultsEnd(g);
g.close();
return out.toString();
}
private String buildJSONFromFields(Collection<SearchHitField> values) {
JsonFactory nodeFactory = new JsonFactory();
try {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
JsonGenerator generator = nodeFactory.createGenerator(stream, JsonEncoding.UTF8);
generator.writeStartObject();
for (SearchHitField value : values) {
if (value.getValues().size() > 1) {
generator.writeArrayFieldStart(value.getName());
for (Object val : value.getValues()) {
generator.writeObject(val);
}
generator.writeEndArray();
} else {
generator.writeObjectField(value.getName(), value.getValue());
}
}
generator.writeEndObject();
generator.flush();
return new String(stream.toByteArray(), Charset.forName("UTF-8"));
} catch (IOException e) {
return null;
}
}
/**
* Dumps JSON-serialized string of all stored metric.
*
* @return dumped JSON string of all metric.
* @throws IOException when failed to write file.
*/
public synchronized String dumpAllMetricToJson() throws IOException {
final ObjectMapper objectMapper = new ObjectMapper();
final JsonFactory jsonFactory = new JsonFactory();
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
try (JsonGenerator jsonGenerator = jsonFactory.createGenerator(stream, JsonEncoding.UTF8)) {
jsonGenerator.setCodec(objectMapper);
jsonGenerator.writeStartObject();
for (final Map.Entry<Class<? extends Metric>, Map<String, Object>> metricMapEntry : metricMap.entrySet()) {
jsonGenerator.writeFieldName(metricMapEntry.getKey().getSimpleName());
jsonGenerator.writeStartObject();
for (final Map.Entry<String, Object> idToMetricEntry : metricMapEntry.getValue().entrySet()) {
generatePreprocessedJsonFromMetricEntry(idToMetricEntry, jsonGenerator, objectMapper);
}
jsonGenerator.writeEndObject();
}
jsonGenerator.writeEndObject();
}
return stream.toString();
}
/**
* Send changed metric data to {@link MetricBroadcaster}, which will broadcast it to
* all active WebSocket sessions. This method should be called manually if you want to
* send changed metric data to the frontend client. Also this method is synchronized.
*
* @param metricClass class of the metric.
* @param id id of the metric.
* @param <T> type of the metric to broadcast
*/
public synchronized <T extends Metric> void triggerBroadcast(final Class<T> metricClass, final String id) {
final MetricBroadcaster metricBroadcaster = MetricBroadcaster.getInstance();
final ObjectMapper objectMapper = new ObjectMapper();
final T metric = getMetricWithId(metricClass, id);
final JsonFactory jsonFactory = new JsonFactory();
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
try (JsonGenerator jsonGenerator = jsonFactory.createGenerator(stream, JsonEncoding.UTF8)) {
jsonGenerator.setCodec(objectMapper);
jsonGenerator.writeStartObject();
jsonGenerator.writeFieldName("metricType");
jsonGenerator.writeString(metricClass.getSimpleName());
jsonGenerator.writeFieldName("data");
jsonGenerator.writeObject(metric);
jsonGenerator.writeEndObject();
metricBroadcaster.broadcast(stream.toString());
} catch (final IOException e) {
throw new MetricException(e);
}
}
/**
* Persist an object to disk. This will most likely be an area or region, but in theory you could
* write anything that serializes properly.
* @param object
* @param filename
*/
public void persist(Object object, String filename) {
String path = commander.savePath();
if (commander.config.isPersistentAreas()) {
File dir = new File(path);
dir.mkdirs();
log.info("saving file " + path + filename);
File file = new File(path + filename);
try (
FileOutputStream stream = new FileOutputStream(file);
GZIPOutputStream gzip = new GZIPOutputStream(stream)
) {
JsonFactory jfactory = new JsonFactory();
JsonGenerator jGenerator = jfactory
.createGenerator(gzip, JsonEncoding.UTF8);
jGenerator.setCodec(objectMapper);
jGenerator.writeObject(object);
jGenerator.close();
} catch (IOException e) {
throw new RuntimeException("Couldn't persist object " + object.toString(), e);
}
}
}
public void persist(String absoluteFilepath) {
File file = new File(absoluteFilepath);
try (
FileOutputStream stream = new FileOutputStream(file);
//GZIPOutputStream gzip = new GZIPOutputStream(stream)
) {
JsonFactory jfactory = new JsonFactory();
JsonGenerator jGenerator = jfactory
.createGenerator(stream, JsonEncoding.UTF8);
jGenerator.setCodec(new ObjectMapper());
jGenerator.writeObject(this);
jGenerator.close();
} catch (IOException e) {
throw new RuntimeException("Couldn't persist object " + toString(), e);
}
}
void saveScaper(ULandscaper scaper, String filename) {
String path = commander.savePath();
File file = new File(path + filename);
try (
FileOutputStream stream = new FileOutputStream(file);
) {
JsonFactory jfactory = new JsonFactory();
JsonGenerator jGenerator = jfactory
.createGenerator(stream, JsonEncoding.UTF8);
jGenerator.setCodec(objectMapper);
jGenerator.writeObject(scaper);
jGenerator.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private void setupFiles(String sensorReadingPath) {
String logFilename = deviceName.concat(LOG_EXTENSION);
Path sensorReadingDirectory = Paths.get(sensorReadingPath, sensorData.getDeviceType());
this.sensorReadingFilePath = Paths.get(
sensorReadingDirectory.toString(), deviceName);
this.sensorReadingLogFilePath = Paths.get(
sensorReadingDirectory.toString(), logFilename);
if (!Files.exists(sensorReadingDirectory)) {
Boolean madeDir = sensorReadingDirectory.toFile().mkdirs();
if (!madeDir) {
LOGGER.error("The following directory could not be accessed or created: %s", sensorReadingDirectory);
}
}
try {
this.jsonGenerator = objectMapper.getFactory().createGenerator(
new File(sensorReadingLogFilePath.toString()), JsonEncoding.UTF8);
this.sensorReadingTmp = File.createTempFile(sensorReadingFilePath.toString(), ".tmp");
} catch (IOException e) {
LOGGER.error("Error during reading/log files creation: %s", e);
System.exit(1);
}
}
@Override
public void handle(HttpServletRequest request,
HttpServletResponse response, AccessDeniedException e) throws IOException {
//服务器地址
String toUrl = ClientIpUtil.getFullRequestUrl(request);
boolean isAjax = "XMLHttpRequest".equals(request
.getHeader("X-Requested-With")) || "apiLogin".equals(request
.getHeader("api-login"));
if (isAjax) {
response.setHeader("Content-Type", "application/json;charset=UTF-8");
try {
ResponseResult<Object> responseMessage = new ResponseResult<>();
responseMessage.setStatus(GlobalConstant.ERROR_DENIED);
responseMessage.setMessage(toUrl);
ObjectMapper objectMapper = new ObjectMapper();
JsonGenerator jsonGenerator = objectMapper.getFactory().createGenerator(response.getOutputStream(),
JsonEncoding.UTF8);
objectMapper.writeValue(jsonGenerator, responseMessage);
} catch (Exception ex) {
throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex);
}
} else {
/// response.sendRedirect(accessDeniedUrl + "?toUrl=" + toUrl);
response.sendRedirect(accessDeniedUrl);
}
}
@Override
public void handle(HttpServletRequest request,
HttpServletResponse response, AccessDeniedException e) throws IOException {
String toUrl = ClientIpUtils.getFullRequestUrl(request);
log.info("【" + request.getRequestURI() + "】权限不足 FORBIDDEN");
response.setHeader("Content-Type", "application/json;charset=UTF-8");
Map<String, Object> responseMessage = new HashMap<>(16);
responseMessage.put("status", HttpStatus.FORBIDDEN.value());
responseMessage.put("message", "权限不足!");
responseMessage.put("path", toUrl);
ObjectMapper objectMapper = new ObjectMapper();
response.setStatus(HttpStatus.FORBIDDEN.value());
JsonGenerator jsonGenerator = objectMapper.getFactory().createGenerator(response.getOutputStream(),
JsonEncoding.UTF8);
objectMapper.writeValue(jsonGenerator, responseMessage);
}
private static JsonGenerator createGenerator(JsonFactory f, Object o) throws SAXException {
try {
if (o instanceof Writer) {
return f.createGenerator((Writer)o);
}
if (o instanceof OutputStream) {
return f.createGenerator((OutputStream)o);
}
if (o instanceof File) {
return f.createGenerator((File)o, JsonEncoding.UTF8);
}
throw new RuntimeException(new OperationNotSupportedException(String.format("Object must be a Writer, OutputStream, or File, but was of class %s",
o.getClass().getName())));
} catch (IOException e) {
throw new SAXException(e);
}
}
/**
* Dump the report as JSON to the given output stream.
*
* @param reportMap the report to dump
* @param output the stream to dump to
* @param match only dump matching results
*/
private void dump(final ReportMap reportMap, final OutputStream output, final ExtractionStatus match) throws
IOException {
final ObjectMapper mapper = new ObjectMapper();
final SimpleModule module = new SimpleModule();
module.addSerializer(ReportMap.class, new ReportSerializer(monitor, match));
mapper.registerModule(module);
try (final JsonGenerator jsonGenerator = new JsonFactory().setCodec(mapper).createGenerator(output,
JsonEncoding.UTF8)) {
jsonGenerator.useDefaultPrettyPrinter();
jsonGenerator.writeObject(reportMap);
jsonGenerator.writeRaw('\n');
}
}
/**
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String ct = "application/javascript; charset=" + StandardCharsets.UTF_8;
response.setContentType(ct);
JsonFactory f = new JsonFactory();
try (JsonGenerator g = f.createGenerator(response.getOutputStream(), JsonEncoding.UTF8)) {
response.getOutputStream().write("var ApicurioRegistryConfig = ".getBytes("UTF-8")); //$NON-NLS-1$ //$NON-NLS-2$
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
g.setCodec(mapper);
g.useDefaultPrettyPrinter();
ConfigJs config = new ConfigJs();
config.mode = "prod";
config.artifacts.url = this.generateApiUrl(request);
config.ui.url = this.generateUiUrl(request);
config.ui.contextPath = "/ui";
config.features.readOnly = this.isFeatureReadOnly();
g.writeObject(config);
g.flush();
response.getOutputStream().write(";".getBytes("UTF-8")); //$NON-NLS-1$ //$NON-NLS-2$
} catch (Exception e) {
throw new ServletException(e);
}
}
private JsonEncoding getEncoding(MediaType contentType) {
if (contentType != null && contentType.getCharSet() != null) {
Charset charset = contentType.getCharSet();
for (JsonEncoding encoding : JsonEncoding.values()) {
if (charset.name().equals(encoding.getJavaName())) {
return encoding;
}
}
}
return JsonEncoding.UTF8;
}
/**
* Constructor.
* @param targetStream
* @param logger
* @throws IOException
*/
public JsonExportWriter(OutputStream targetStream, IApimanLogger logger) throws IOException {
super(logger);
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
jg = jsonFactory.createGenerator(targetStream, JsonEncoding.UTF8);
jg.useDefaultPrettyPrinter();
jg.setCodec(om);
jg.writeStartObject(); // Set out the base/root object
}
/**
* {@inheritDoc}
*/
@Override
protected JsonGenerator _createGenerator(ObjectWriter writer, OutputStream rawStream, JsonEncoding enc) throws IOException {
JsonGenerator generator = super._createGenerator(writer, rawStream, enc);
JacksonUtils.configureGenerator(uriInfo, generator, mode.isDev());
return generator;
}
@Override
@Nullable
protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers,
@Nullable Object conversionHint) {
try {
Class<?> view = getSerializationView(conversionHint);
if (byte[].class == getSerializedPayloadClass()) {
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
JsonEncoding encoding = getJsonEncoding(getMimeType(headers));
JsonGenerator generator = this.objectMapper.getFactory().createGenerator(out, encoding);
if (view != null) {
this.objectMapper.writerWithView(view).writeValue(generator, payload);
}
else {
this.objectMapper.writeValue(generator, payload);
}
payload = out.toByteArray();
}
else {
Writer writer = new StringWriter();
if (view != null) {
this.objectMapper.writerWithView(view).writeValue(writer, payload);
}
else {
this.objectMapper.writeValue(writer, payload);
}
payload = writer.toString();
}
}
catch (IOException ex) {
throw new MessageConversionException("Could not write JSON: " + ex.getMessage(), ex);
}
return payload;
}
@Override
public JacksonWrapperSerializer createSerializer(File file, JsonEncoding encoding) {
try {
return new JacksonWrapperSerializer(innerFactory.createGenerator(file, encoding), getSupportedFormat());
} catch (IOException e) {
e.printStackTrace();
throw new KriptonRuntimeException(e);
}
}
@Override
public Flux<DataBuffer> encode(Publisher<?> inputStream, DataBufferFactory bufferFactory,
ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String, Object> hints) {
Assert.notNull(inputStream, "'inputStream' must not be null");
Assert.notNull(bufferFactory, "'bufferFactory' must not be null");
Assert.notNull(elementType, "'elementType' must not be null");
JsonEncoding encoding = getJsonEncoding(mimeType);
if (inputStream instanceof Mono) {
return Mono.from(inputStream).map(value ->
encodeValue(value, bufferFactory, elementType, mimeType, hints, encoding)).flux();
}
else {
return this.streamingMediaTypes.stream()
.filter(mediaType -> mediaType.isCompatibleWith(mimeType))
.findFirst()
.map(mediaType -> {
byte[] separator = STREAM_SEPARATORS.getOrDefault(mediaType, NEWLINE_SEPARATOR);
return Flux.from(inputStream).map(value -> {
DataBuffer buffer = encodeValue(
value, bufferFactory, elementType, mimeType, hints, encoding);
if (separator != null) {
buffer.write(separator);
}
return buffer;
});
})
.orElseGet(() -> {
ResolvableType listType = ResolvableType.forClassWithGenerics(List.class, elementType);
return Flux.from(inputStream).collectList().map(list ->
encodeValue(list, bufferFactory, listType, mimeType, hints, encoding)).flux();
});
}
}
private JsonReportWriter(final OutputStream outputStream) {
this.testClassName = null;
this.testName = null;
JsonGenerator jg = null;
try {
jg = new JsonFactory().createGenerator(outputStream, JsonEncoding.UTF8);
} catch (IOException e) {
log.error("exception creating event log: {}", e);
}
this.jg = jg;
}
@Test
public void test2() throws Exception {
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(
new File("D:\\output.json"), JsonEncoding.UTF8);
generator.writeStartObject();
generator.writeStringField("brand", "Mercedes");
generator.writeNumberField("doors", 5);
generator.writeEndObject();
generator.close();
}