1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zhijiantianya-yudao-cloud

 / Детали:

Инициализация JsonUtils при запуске может вызвать проблему перезаписи конфигураций. Это приведёт к...

Предстоит сделать
Владелец
Создано  
04.03.2025

ошибкам сериализации при встрече с пустыми значениями.

При возникновении проблем, пожалуйста, выполните поиск в https://gitee.com/zhijiantianya/yudao-cloud/issues, чтобы проверить наличие аналогичной проблемы.

Не используйте шаблон при создании запроса, так как он будет автоматически удалён системой.

Основная информация

YudaoJacksonAutoConfiguration вызывает метод init при конфигурации JsonUtils bean. Метод init переопределяет объект objectMapper, что приводит к тому, что логика обработки пустых значений в статическом блоке кода становится недействительной.


  • Версия ruoyi-vue-pro: master-jdk17
  • Операционная система: Windows 11
  • База данных: MySQL

Предполагаемая причина

Метод init переопределяет объект objectMapper, что приводит к ошибкам при сериализации через JsonUtils.toJsonString.

Шаги воспроизведения

Первый шаг,

Второй шаг,### Ошибочное сообщение

2025-02-21 14:51:03.940 | ERROR 37748 | reactor-http-nio-2 [TID: N/A] o.s.w.s.adapter.HttpWebHandlerAdapter | [68782766-2] Error [com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory$1 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: cn.iocoder.yudao.gateway.filter.logging.AccessLog["route"]->org.springframework.cloud.gateway.route.Route["filters"]->java.util.Collections$UnmodifiableRandomAccessList[0]->org.springframework.cloud.gateway.filter.OrderedGatewayFilter["delegate"])] for HTTP GET "/admin-api/system/tenant/get-id-by-name?name=%E8%8A%8B%E9%81%93%E6%BA%90%E7%A0%81", but ServerHttpResponse already committed (200 OK)
2025-02-21 14:51:03.941 | ERROR 37748 | reactor-http-nio-2 [TID: N/A] r.n.http.server.HttpServerOperations | [68782766-2, L:/192.168.1.50:48080 - R:/192.168.1.50:53920] Error finishing response. Closing connection
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory$1

Цепочка ошибки:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory$1 and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: cn.iocoder.yudao.gateway.filter.logging.AccessLog["route"]->org.springframework.cloud.gateway.route.Route["filters"]->java.util.Collections$UnmodifiableRandomAccessList[0]->org.springframework.cloud.gateway.filter.OrderedGatewayFilter["delegate"])
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.18.2.jar:2.18.2]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
    Assembly trace from producer [reactor.core.publisher.MonoIgnoreThen]:
        reactor.core.publisher	Mono.then(Mono.java:4880)
        cn.iocoder.yudao.gateway.filter.logging.AccessLogFilter.filterWithoutRequestBody(AccessLogFilter.java:132)
    Original Stack Trace:

Ошибка была зафиксирована в следующих местах:
*_____________ Mono. затем ⇢ в cn. iocoder. yudao. gateway. filter. logging. AccessLogFilter. filterWithoutRequestBody(AccessLogFilter. java:132)
*____________ Mono. defer ⇢ в org. springframework. cloud. gateway. handler. FilteringWebHandler$DefaultGatewayFilterChain. filter(FilteringWebHandler. java:154)
*_____________ Mono. затем ⇢ в org. springframework. web. reactive. result. SimpleHandlerAdapter. handle(SimpleHandlerAdapter. java:46)
|_ Mono. onErrorResume ⇢ в org. springframework. web. reactive. DispatcherHandler. handleResultMono(DispatcherHandler. java:168)
|_ Mono. flatMap ⇢ в org. springframework. web. reactive. DispatcherHandler. handleResultMono(DispatcherHandler. java:172)
*____________ Mono. error ⇢ в org. springframework. web. reactive. result. method. annotation. RequestMappingHandlerAdapter. handleException(RequestMappingHandlerAdapter. java:340)
*__________ Mono. flatMap ⇢ в org. springframework. web. reactive. DispatcherHandler. handle(DispatcherHandler. java:154)
*____________ Mono. defer ⇢ в org. springframework. web. server. handler. DefaultWebFilterChain. filter(DefaultWebFilterChain. java:1 Yöntem:106)
|_ checkpoint ⇢ cn. iocoder. yudao. gateway. filter. cors. CorsFilter [DefaultWebFilterChain]
*____________ Mono. defer ⇢ в org. springframework. web. server. handler. DefaultWebFilterChain. filter(DefaultWebFilterChain. java:106)
|_ checkpoint ⇢ org. springframework. cloud. gateway. фильтр. ВесовойКалькуляторФильтр [DefaultWebFilterChain]
*____________ Mono. defer ⇢ в org. springframework. web. server. handler. DefaultWebFilterChain. filter(DefaultWebFilterChain. java:106)
|_ Mono. doOnError ⇢ в org. springframework. web. server. handler. ExceptionHandlingWebHandler. handle(ExceptionHandlingWebHandler. java:84)
|_ Mono. onErrorResume ⇢ в org. springframework. web. server. handler. ExceptionHandlingWebHandler. handle(ExceptionHandlingWebHandler. java:85)
|_ Mono. doOnError ⇢ в org. springframework. web. server. handler. ExceptionHandlingWebHandler. handle(ExceptionHandlingWebHandler. java:84)
|_ Mono. onErrorResume ⇢ в org. springframework. web. server. handler. ExceptionHandlingWebHandler. handle(ExceptionHandlingWebHandler. java:85)
|_ Mono. doOnError ⇢ в org. springframework. web. server. handler. ExceptionHandlingWebHandler. handle(ExceptionHandlingWebHandler. java:84)```java:84)
|_ Mono.onErrorResume ⇢ в org.springframework.web.server.handler.ExceptionHandlingWebHandler.handle(ExceptionHandlingWebHandler.java:85)
|_ Mono.doOnError ⇢ в org.springframework.web.server.handler.ExceptionHandlingWebHandler.handle(ExceptionHandlingWebHandler.java:84)
|_ Mono.onErrorResume ⇢ в org.springframework.web.server.handler.ExceptionHandlingWebHandler.handle(ExceptionHandlingWebHandler.java:85)
|_ Mono.doOnSuccess ⇢ в org.springframework.web.server.adapter.HttpWebHandlerAdapter.handle(HttpWebHandlerAdapter.java:299)
|_ Mono.onErrorResume ⇢ в org.springframework.web.server.adapter.HttpWebHandlerAdapter.handle(HttpWebHandlerAdapter.java:300)
|_ Mono.tap ⇢ в org.springframework.web.server.adapter.HttpWebHandlerAdapter.handle(HttpWebHandlerAdapter.java:301)
*____________ Mono.error ⇢ в org.springframework.web.server.handler.ExceptionHandlingWebHandler$CheckpointInsertingHandler.handle(ExceptionHandlingWebHandler.java:106)
|_ checkpoint ⇢ HTTP GET "/admin-api/system/tenant/get-id-by-name?name=%E8%8A%8B%E9%81%93%E6%BA%90%E7%A0%81" [ExceptionHandlingWebHandler]
*____________ Mono.error ⇢ в org.springframework.cloud.gateway.filter.headers.observation.ObservationClosingWebExceptionHandler.handle(ObservationClosingWebExceptionHandler.java:53)
*____________ Mono.error ⇢ в cn.iocoder.yudao.gateway.handler.GlobalExceptionHandler.обработка(GlobalExceptionHandler.java:35)
*____________ Mono.error ⇢ в org.springframework.web.server.handler.ResponseStatusExceptionHandler.handle(ResponseStatusExceptionHandler.java:68)
*____________ Mono.error ⇢ в org.springframework.web.server.adapter.HttpWebHandlerAdapter.handleUnresolvedError(HttpWebHandlerAdapter.java:358)
*____________ Mono.then ⇢ в org.springframework.web.server.adapter.HttpWebHandlerAdapter.handle(HttpWebHandlerAdapter.java:302)
*____________ Mono.then ⇢ в org.springframework.web.server.adapter.HttpWebHandlerAdapter.handle(HttpWebHandlerAdapter.java:303)
|_ Mono.doOnError ⇢ в org.springframework.http.server.reactive.ReactorHttpHandlerAdapter.apply(ReactorHttpHandlerAdapter.java:66)
|_ Mono.doOnSuccess ⇢ в org.springframework.http.server.reactive.ReactorHttpHandlerAdapter.apply(ReactorHttpHandlerAdapter.java:67)
*_Mono.

  		
  		в com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.18.2.jar:2.18.2]
  		в com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1328) ~[jackson-databind-2.18.2.jar:2.18.2]
  		в com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:414) ~[jackson-databind-2.18.2.jar:2.18.2]
  		в com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:53) ~[jackson-databind-2.18.2.jar:2.18.2]
  		в com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:30) ~[jackson-databind-2.18.2.jar:2.18.2]
  		в com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.18.2.jar:2.18.2]
  		в com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.18.2.jar:2.18.2]
  		в com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:184) ~[jackson-databind-2.18.2.jar:2.18.2]
  		в com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) ~[jackson-databind-2.18.2.jar:2.18.2]

```plaintext
 в com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) ~[jackson-databind-2.18.2.jar:2.18.2]
 в com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) ~[jackson-databind-2.18.2.jar:2.18.2]
 в com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.18.2.jar:2.18.2]
 в com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.18.2.jar:2.18.2]
 в com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:184) ~[jackson-databind-2.18.2.jar:2.18.2]
 в com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.18.2.jar:2.18.2]
 в com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:```java
java:770) ~[jackson-databind-2.18.2.jar:2.18.2]
в com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:184) ~[jackson-databind-2.18.2.jar:2.18.2]
в com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:502) ~[jackson-databind-2.18.2.jar:2.18.2]
в com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341) ~[jackson-databind-2.18.2.jar:2.18.2]
в com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4811) ~[jackson-databind-2.18.2.jar:2.18.2]
в com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:4052) ~[jackson-databind-2.18.2.jar:2.18.2]
в cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString(JsonUtils.java:51) ~[classes/:na]
в cn.iocoder.yudao.gateway.filter.logging.AccessLogFilter.writeAccessLog(AccessLogFilter.java:71) ~[classes/:na]
в cn.iocoder.yudao.gateway.filter.logging.AccessLogFilter.lambda$filterWithoutRequestBody$0(AccessLogFilter.java:132) ~[classes/:na]
в reactor.core.publisher.MonoRunnable.call(MonoRunnable.java:73) ~[reactor-core-3.7.1.jar:3.7.1]
в reactor.core.publisher.MonoRunnable.call(MonoRunnable.java:32) ~[reactor-core-3.7.1.jar:3.7.1]
в reactor.core.publisher.AbstractSubscription.request(AbstractSubscription.java:68) ~[reactor-core-3.7.1.jar:3.7.1]

издательство MonoIgnoreThen$ThenIgnoreMain subscribeNext(MonoIgnoreThen.java:229) ~[reactor-core-3.7.1.jar:3.7.1]
в reactor.core.издательство MonoIgnoreThen$ThenIgnoreMain onComplete(MonoIgnoreThen.java:204) ~[reactor-core-3.7.1.jar:3.7.1]
в reactor.core.издательство FluxDoFinally$DoFinallySubscriber onComplete(FluxDoFinally.java:128) ~[reactor-core-3.7.1.jar:3.7.1]
в reactor.core.издательство MonoPeekTerminal$MonoTerminalPeekSubscriber onComplete(MonoPeekTerminal.java:299) ~[reactor-core-3.7.1.jar:3.7.1]
в reactor.core.издательство FluxPeekFuseable$PeekFuseableConditionalSubscriber onComplete(FluxPeekFuseable.java:595) ~[reactor-core-3.7.1.jar:3.7.1]
в reactor.core.издательство MonoIgnoreThen$ThenIgnoreMain onComplete(MonoIgnoreThen.```java
java:210) ~[reactor-core-3.7.1.jar:3.7.1]
at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:299) ~[reactor-core-3.7.1.jar:3.7.1]
at org.springframework.http.server.reactive.ChannelSendOperator$WriteCompletionBarrier.onComplete(ChannelSendOperator.java:428) ~[spring-web-6.2.1.jar:6.2.1]
at reactor.core.publisher MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89) ~[reactor-core-3.7.1.jar:3.7.1]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:209) ~[reactor-core-3.7.1.jar:3.7.1]
at reactor.core.publisher MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:210) ~[reactor-core-3.7.1.jar:3.7.1]
at reactor.netty.channel MonoSendMany$SendManyInner.run(MonoSendMany.java:349) ~[reactor-netty-core-1.2.1.jar:1.2.1]
at reactor.netty.channel MonoSendMany$SendManyInner.trySchedule(MonoSendMany.java:434) ~[reactor-netty-core-1.2.1.jar:1.2.1]
at reactor.netty.channel MonoSendMany$SendManyInner.trySuccess(MonoSendMany.java:598) ~[reactor-netty-core-1.2.1.jar:1.2.1]
at reactor.netty.channel MonoSendMany$SendManyInner.trySuccess(MonoSendMany.java:118) ~[reactor-netty-core-1.2.1.jar:1.2.1]
at io.netty.util.concurrent.PromiseCombiner.tryPromise(PromiseCombiner.java:170) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
at io.netty.util.concurrent.PromiseCombiner.access$600(PromiseCombiner.java:35) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
at io.netty.util.concurrent.PromiseCombiner$1.operationComplete0(PromiseCombiner.java:62) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
at io.netty.util.concurrent.PromiseCombiner$1.operationComplete(PromiseCombiner.java:44) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]

116.Final]
 		at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.util.internal.PromiseNotificationUtil.trySuccess(PromiseNotificationUtil.java:48) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.ChannelOutboundBuffer.safeSuccess(ChannelOutboundBuffer.java:748) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:303) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:383) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:437) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:929) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:359) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:893) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1319) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:935) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
 		at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.flush(CombinedChannelDuplexHandler.java:531) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.channel.ChannelOutboundHandlerAdapter.flush(ChannelOutboundHandlerAdapter.java:125) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.channel.CombinedChannelDuplexHandler.flush(CombinedChannelDuplexHandler.java:356) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:937) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at reactor.netty.http.server.HttpTrafficHandler.flush(HttpTrafficHandler.java:347) ~[reactor-netty-http-1.2.1.jar:1.2.1]
		at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:937) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:921) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:907) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
		at reactor.netty.channel.MonoSendMany$SendManyInner$AsyncFlush.run(MonoSendMany.java:800) ~[reactor-netty-core-1.2.1.jar:1.2.1]
		at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:166) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
		at io.netty.channel.nio.NioEventLoop运行所有任务(NioEventLoop.java:552) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]```java
Final.jar:4.1.116.Final]run(NioEventLoop.java:569) ~[netty-transport-4.1.116.Final.jar:4.1.116.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.116.Final.jar:4.1.116.Final]
	at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/zhijiantianya-yudao-cloud.git
git@api.gitlife.ru:oschina-mirror/zhijiantianya-yudao-cloud.git
oschina-mirror
zhijiantianya-yudao-cloud
zhijiantianya-yudao-cloud