如果您对jmeterbeanshellTypedvariabledeclaration:Objectconstructor错误感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于
如果您对jmeter beanshell Typed variable declaration : Object constructor错误感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于jmeter beanshell Typed variable declaration : Object constructor错误的详细内容,我们还将为您解答jmeter beanshell sampler的相关问题,并且为您提供关于2019CVPR:Classification-Reconstruction Learning for Open-Set Recogition(Abstract)、angular – 无法解析AuthenticationService的所有参数:([object Object],?,[object Object])、asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported、Bean 后置处理器 - SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors的有价值信息。
本文目录一览:- jmeter beanshell Typed variable declaration : Object constructor错误(jmeter beanshell sampler)
- 2019CVPR:Classification-Reconstruction Learning for Open-Set Recogition(Abstract)
- angular – 无法解析AuthenticationService的所有参数:([object Object],?,[object Object])
- asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported
- Bean 后置处理器 - SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors
jmeter beanshell Typed variable declaration : Object constructor错误(jmeter beanshell sampler)
从数据库取值和响应值做比较,使用beanshell如下:


import org.json.JSONArray;
import org.json.JSONObject;
res_str = prev.getResponseDataAsString();
JSONObject res_json_obj = new JSONObject(res_str);
JSONArray dbd_json_array = new JSONArray("${dbd}"); // 数据库转json
JSONObject dbd_json_obj = new JSONObject();
FailureMessage = "";
Failure = true;
res_json_obj = new JSONObject(res_json_obj.get("data").toString());
if (!res_json_obj.isNull("list")) {
JSONArray res_json_array = new JSONArray(res_json_obj.get("list").toString());
log.info("响应长度:" + res_json_array.length());
log.info("数据返回长度:" + dbd_json_array.length());
if (res_json_array.length() == dbd_json_array.length()) {
for (int i = 0; i < dbd_json_array.length(); i++) {
Message = "\n第"+i+"条记录:";
res_json_obj = res_json_array.getJSONObject(i);
dbd_json_obj = dbd_json_array.getJSONObject(i);
System.out.println(res_json_obj);
Iterator keys = dbd_json_obj.keys();
while (keys.hasNext()) {
String key = (String) keys.next();
String resvalue="";
String dbdvalue="";
System.out.println("key:" + key);
if (key.equals(null) || key.equals("")) {
Message += key + "不存在;";
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
if(res_json_obj.has(key) && dbd_json_obj.has(key)) {
resvalue = res_json_obj.getString(key);
dbdvalue = dbd_json_obj.getString(key);
}else {
Message += key + "不存在;";
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
if (resvalue.equals(dbdvalue)) {
Message += key + "匹配成功;";
Failure = false;
} else {
Message += key + "匹配不成功,数据库值:" + dbdvalue + ",响应值:"+resvalue;
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
log.info("value:" + res_json_obj.get(key));
}
}
} else {
Message += "接口响应与数据库数据不匹配;";
Message += "响应数据:" + res_json_array + "|数据库查询结果:" + dbd_json_array;
FailureMessage += Message;
Failure = true;
log.info("value:" + res_json_obj.get(key));
break;
}
} else {
FailureMessage = "返回数据为空";
log.info(FailureMessage);
Failure = true;
return;
}
import org.json.JSONArray;
import org.json.JSONObject;
res_str = prev.getResponseDataAsString();
JSONObject res_json_obj = new JSONObject(res_str);
JSONArray dbd_json_array = new JSONArray("${dbd}"); // 数据库转json
JSONObject dbd_json_obj = new JSONObject();
FailureMessage = "";
Failure = true;
res_json_obj = new JSONObject(res_json_obj.get("data").toString());
if (!res_json_obj.isNull("list")) {
JSONArray res_json_array = new JSONArray(res_json_obj.get("list").toString());
log.info("响应长度:" + res_json_array.length());
log.info("数据返回长度:" + dbd_json_array.length());
if (res_json_array.length() == dbd_json_array.length()) {
for (int i = 0; i < dbd_json_array.length(); i++) {
Message = "\n第"+i+"条记录:";
res_json_obj = res_json_array.getJSONObject(i);
dbd_json_obj = dbd_json_array.getJSONObject(i);
System.out.println(res_json_obj);
Iterator keys = dbd_json_obj.keys();
while (keys.hasNext()) {
String key = (String) keys.next();
String resvalue="";
String dbdvalue="";
System.out.println("key:" + key);
if (key.equals(null) || key.equals("")) {
Message += key + "不存在;";
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
if(res_json_obj.has(key) && dbd_json_obj.has(key)) {
resvalue = res_json_obj.getString(key);
dbdvalue = dbd_json_obj.getString(key);
}else {
Message += key + "不存在;";
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
if (resvalue.equals(dbdvalue)) {
Message += key + "匹配成功;";
Failure = false;
} else {
Message += key + "匹配不成功,数据库值:" + dbdvalue + ",响应值:"+resvalue;
FailureMessage += Message;
Failure = true;
log.info(Message);
break;
}
log.info("value:" + res_json_obj.get(key));
}
}
} else {
Message += "接口响应与数据库数据不匹配;";
Message += "响应数据:" + res_json_array + "|数据库查询结果:" + dbd_json_array;
FailureMessage += Message;
Failure = true;
log.info("value:" + res_json_obj.get(key));
break;
}
} else {
FailureMessage = "返回数据为空";
log.info(FailureMessage);
Failure = true;
return;
}
这个脚本有个前提,先建立了返回值的对象,当通过jmeter从数据库获得需要验证的数值的时候,需要指定数据库查询返回值字段名与java对象字段名一致。
遇到Typed variable declaration : Object constructor
发现数据库结果数组如下:
dbd=[{cardType=1, cardTypeText=, cardNo=62260906, bankType=1}]
原因是cardTypeText无值,将cardTypeText赋值可以解决。
相同的代码在eclipse中运行没有问题,但是在jmeter中有问题,可能是对空值的默认处理方法不一样。
---------------------
作者:谁知道丶
来源:CSDN
原文:https://blog.csdn.net/chyo098/article/details/82151019
版权声明:本文为博主原创文章,转载请附上博文链接!
2019CVPR:Classification-Reconstruction Learning for Open-Set Recogition(Abstract)
Abstract
Open-set classification is a problem of handling ''unknown'' classes that are not contained in the training dataset, whereas traditional classifiers assume that only known classes appear in the test environment. Existing open-set classifiers rely on deep networks trained in a supervised manner on known classes in the training set; this causes specialization of learned representations to known classes and makes it hard to distinguish unknowns from knowns. In contrast, we train networks for joint classification and reconstruction of input data. This enhances the learned representation so as to preserve information useful for separating unknowns from knowns, as well as to discriminate classes of knowns. Our novel Classification-Reconstruction learning for Open-Set Recognition (CROSR) utilizes latent representations for reconstruction and enables robust unknown detection without harming the known-class classification accuracy. Extensive experiments reveal that the peoposed method outperforms existing deep open-set classifiers in multiple standard datasets and is robust to diverse outliers.
开集分类是一种处理训练数据集中不包含 “未知” 类的问题,然而,传统分类器假设,只有已知类出现在测试环境中。现有的开集分类器依赖于深度网络,该网络是以监督方式在已知类训练集中训练的;这就会导致,学习表示,对已知类的特化,并且使其难以区分已知和未知。相反,我们我们训练网络以进行输入数据的联合分类和重建。这增强了学习的表示,以便保存用于区分未知和已知的信息,同时对已知分类。
我们有一种新的分类 - 重建学习(CROSR),针对开集识别,使用潜在表示进行重建,并且能够在不损害已知级分类准确度的情况下实现稳健的未知检测。大量实验表明,我们提出的方法在多个标准数据集中优于现有的深度开集分类器,并且对各种异常具有鲁棒性。
angular – 无法解析AuthenticationService的所有参数:([object Object],?,[object Object])
Can’t resolve all parameters for AuthenticationService: ([object Object],?,[object Object])
我已经检查了几乎每个主题,并尝试了多种方法来解决它,但仍然无法在第二天击败它.
我试图像这样在appService中注入第一个authService但是得到了同样的错误
@Inject(forwardRef(() => AuthenticationService)) public authService: AuthenticationService
我检查了所有DI和服务内部的导入顺序,在我看来一切都是正确的
如果有人可以帮我处理它,我很感激.
Angular 4.0.0
AuthService
import { Injectable } from '@angular/core'; import {Http,Headers,Response} from '@angular/http'; import 'rxjs/add/operator/toPromise'; import {Observable} from 'rxjs/Rx'; import {AppServices} from "../../app.services"; import {Router} from "@angular/router"; @Injectable() export class AuthenticationService { public token: any; constructor( private http: Http,private appService: AppServices,private router: Router ) { this.token = localStorage.getItem('token'); } login(username: string,password: string): Observable<boolean> { let headers = new Headers(); let body = null; headers.append("Authorization",("Basic " + btoa(username + ':' + password))); return this.http.post(this.appService.api + '/login',body,{headers: headers}) .map((response: Response) => { let token = response.json() && response.json().token; if (token) { this.token = token; localStorage.setItem('Conform_token',token); return true; } else { return false; } }); } logout(): void { this.token = null; localStorage.removeItem('Conform_token'); this.router.navigate(['/login']); } }
应用服务
import {Injectable} from '@angular/core'; import {Headers,Http,RequestOptions} from '@angular/http'; import {Router} from "@angular/router"; import {AuthenticationService} from "./auth/auth.service"; import 'rxjs/add/operator/toPromise'; import {Observable} from 'rxjs/Rx'; @Injectable() export class AppServices { api = '//endpoint/'; public options: any; constructor( private http: Http,private router: Router,public authService: AuthenticationService // doesn't work // @Inject(forwardRef(() => AuthenticationService)) public authService: AuthenticationService // doesn't work either ) { let head = new Headers({ 'Authorization': 'Bearer ' + this.authService.token,"Content-Type": "application/json; charset=utf8" }); this.options = new RequestOptions({headers: head}); } // ==================== // data services // ==================== getData(): Promise<any> { return this.http .get(this.api + "/data",this.options) .toPromise() .then(response => response.json() as Array<Object>) .catch((err)=>{this.handleError(err);}) }
应用模块
import { browserModule } from '@angular/platform-browser'; import { browserAnimationsModule } from '@angular/platform-browser/animations'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import {BaseRequestOptions,HttpModule} from '@angular/http'; import { MaterialModule} from '@angular/material'; import {FlexLayoutModule} from "@angular/flex-layout"; import 'hammerjs'; import { routing,appRoutingProviders } from './app.routing'; import { AppServices } from './app.services'; import {AuthGuard} from "./auth/auth.guard"; import {AuthenticationService} from "./auth/auth.service"; import {AppComponent} from './app.component'; import {AuthComponent} from './auth/auth.component'; import {NotFoundComponent} from './404/not-found.component'; import { HomeComponent } from './home/home.component'; @NgModule({ declarations: [ AppComponent,AuthComponent,NotFoundComponent,HomeComponent ],imports: [ browserModule,browserAnimationsModule,FormsModule,HttpModule,routing,MaterialModule,FlexLayoutModule ],providers: [AppServices,AuthGuard,AuthenticationService],bootstrap: [AppComponent] }) export class AppModule { }
解决方法
你可以使用
export class AuthenticationService { public token: any; appService: AppServices; constructor( private http: Http,// private appService: AppServices,injector:Injector; private router: Router ) { setTimeout(() => this.appService = injector.get(AppServices)); this.token = localStorage.getItem('token'); }
另见DI with cyclic dependency with custom HTTP and ConfigService
要避免使用setTimeout,您还可以从AppService的构造函数中设置AuthenticationService.appService(或者相反)
asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported
原文: asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported
在asp.net core 3.0 中,如果直接在Controller
中返回 Jobject
类型,会抛出如下错误:
The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported.
System.NotSupportedException: The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported.
at System.Text.Json.JsonPropertyInfoNotNullable`4.GetDictionaryKeyAndValueFromGenericDictionary(WriteStackFrame& writeStackFrame, String& key, Object& value)
at System.Text.Json.JsonPropertyInfo.GetDictionaryKeyAndValue(WriteStackFrame& writeStackFrame, String& key, Object& value)
at System.Text.Json.JsonSerializer.HandleDictionary(JsonClassInfo elementClassInfo, JsonSerializerOptions options, Utf8JsonWriter writer, WriteStack& state)
at System.Text.Json.JsonSerializer.Write(Utf8JsonWriter writer, Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.JsonSerializer.WriteAsyncCore(Stream utf8Json, Object value, Type inputType, JsonSerializerOptions options, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|29_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
该问题的出现估计与.net 3.0 新引入的System.Text.Json
类库有关.
折衷的解决办法是:
使用Content
方法将 JObject
类型的返回值转为 ContentResult
类型.
伪代码如下:
[HttpPost]
public ContentResult Method1([FromBody]Param param1)
{
JObject result=xxx;
return Content(result.ToString());
}
如果有时间,建议跟一下System.Text.Json
类库的源码来彻底解决该问题.
Bean 后置处理器 - SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors
spring 在创建对象 (org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance) 的时候,使用了这个 构造函数后置处理器,用来选择使用哪个构造函数的.
所以这个后置处理器的执行时机是: 对象实例化之前执行
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#determineConstructorsFromBeanPostProcessors
@Nullable
protected Constructor<?>[] determineConstructorsFromBeanPostProcessors(@Nullable Class<?> beanClass, String beanName)
throws BeansException {
if (beanClass != null && hasInstantiationAwareBeanPostProcessors()) {
for (BeanPostProcessor bp : getBeanPostProcessors()) {
if (bp instanceof SmartInstantiationAwareBeanPostProcessor) {
SmartInstantiationAwareBeanPostProcessor ibp = (SmartInstantiationAwareBeanPostProcessor) bp;
Constructor<?>[] ctors = ibp.determineCandidateConstructors(beanClass, beanName);
if (ctors != null) {
return ctors;
}
}
}
}
return null;
}
这里满足条件的后置处理器,就两个:
1.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor
2. AutowiredAnnotationBeanPostProcessor
ImportAwareBeanPostProcessor
@Override
@Nullable
public Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, String beanName) throws BeansException {
return null;
}
这个类并没有实现这个接口,而是父类去实现的:
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter#determineCandidateConstructors
然而,他也是 啥也没干.
怎么感觉这个后置处理器,哪哪都有他,却哪哪都不干活.
AutowiredAnnotationBeanPostProcessor
@Override
@Nullable
public Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, final String beanName)
throws BeanCreationException {
// Let''s check for lookup methods here...
if (!this.lookupMethodsChecked.contains(beanName)) {
try {
ReflectionUtils.doWithMethods(beanClass, method -> {
Lookup lookup = method.getAnnotation(Lookup.class);
if (lookup != null) {
Assert.state(this.beanFactory != null, "No BeanFactory available");
LookupOverride override = new LookupOverride(method, lookup.value());
try {
RootBeanDefinition mbd = (RootBeanDefinition)
this.beanFactory.getMergedBeanDefinition(beanName);
mbd.getMethodOverrides().addOverride(override);
}
catch (NoSuchBeanDefinitionException ex) {
throw new BeanCreationException(beanName,
"Cannot apply @Lookup to beans without corresponding bean definition");
}
}
});
}
catch (IllegalStateException ex) {
throw new BeanCreationException(beanName, "Lookup method resolution failed", ex);
}
this.lookupMethodsChecked.add(beanName);
}
// Quick check on the concurrent map first, with minimal locking.
Constructor<?>[] candidateConstructors = this.candidateConstructorsCache.get(beanClass);
if (candidateConstructors == null) {
// Fully synchronized resolution now...
synchronized (this.candidateConstructorsCache) {
candidateConstructors = this.candidateConstructorsCache.get(beanClass);
if (candidateConstructors == null) {
Constructor<?>[] rawCandidates;
try {
//反射获取所有构造函数
rawCandidates = beanClass.getDeclaredConstructors();
}
catch (Throwable ex) {
throw new BeanCreationException(beanName,
"Resolution of declared constructors on bean Class [" + beanClass.getName() +
"] from ClassLoader [" + beanClass.getClassLoader() + "] failed", ex);
}
//候选构造方法
List<Constructor<?>> candidates = new ArrayList<>(rawCandidates.length);
Constructor<?> requiredConstructor = null;
Constructor<?> defaultConstructor = null;
//这个貌似是 Kotlin 上用的, 不用管它
Constructor<?> primaryConstructor = BeanUtils.findPrimaryConstructor(beanClass);
int nonSyntheticConstructors = 0;
//遍历这些构造函数
for (Constructor<?> candidate : rawCandidates) {
//判断构造方法是否是合成的
if (!candidate.isSynthetic()) {
nonSyntheticConstructors++;
}
else if (primaryConstructor != null) {
continue;
}
//查看是否有 @Autowired 注解
//如果有多个构造方法, 可以通过标注 @Autowired 的方式来指定使用哪个构造方法
AnnotationAttributes ann = findAutowiredAnnotation(candidate);
if (ann == null) {
Class<?> userClass = ClassUtils.getUserClass(beanClass);
if (userClass != beanClass) {
try {
Constructor<?> superCtor =
userClass.getDeclaredConstructor(candidate.getParameterTypes());
ann = findAutowiredAnnotation(superCtor);
}
catch (NoSuchMethodException ex) {
// Simply proceed, no equivalent superclass constructor found...
}
}
}
//有 @Autowired 的情况
if (ann != null) {
if (requiredConstructor != null) {
throw new BeanCreationException(beanName,
"Invalid autowire-marked constructor: " + candidate +
". Found constructor with ''required'' Autowired annotation already: " +
requiredConstructor);
}
boolean required = determineRequiredStatus(ann);
if (required) {
if (!candidates.isEmpty()) {
throw new BeanCreationException(beanName,
"Invalid autowire-marked constructors: " + candidates +
". Found constructor with ''required'' Autowired annotation: " +
candidate);
}
requiredConstructor = candidate;
}
candidates.add(candidate);
}
//无参构造函数的情况
else if (candidate.getParameterCount() == 0) {
//构造函数没有参数, 则设置为默认的构造函数
defaultConstructor = candidate;
}
}
//到这里, 已经循环完了所有的构造方法
//候选者不为空时
if (!candidates.isEmpty()) {
// Add default constructor to list of optional constructors, as fallback.
if (requiredConstructor == null) {
if (defaultConstructor != null) {
candidates.add(defaultConstructor);
}
else if (candidates.size() == 1 && logger.isInfoEnabled()) {
logger.info("Inconsistent constructor declaration on bean with name ''" + beanName +
"'': single autowire-marked constructor flagged as optional - " +
"this constructor is effectively required since there is no " +
"default constructor to fall back to: " + candidates.get(0));
}
}
candidateConstructors = candidates.toArray(new Constructor<?>[0]);
}
//类的构造方法只有1个, 且该构造方法有多个参数
else if (rawCandidates.length == 1 && rawCandidates[0].getParameterCount() > 0) {
candidateConstructors = new Constructor<?>[] {rawCandidates[0]};
}
//这里不会进, 因为 primaryConstructor = null
else if (nonSyntheticConstructors == 2 && primaryConstructor != null &&
defaultConstructor != null && !primaryConstructor.equals(defaultConstructor)) {
candidateConstructors = new Constructor<?>[] {primaryConstructor, defaultConstructor};
}
//这里也不会进, 因为 primaryConstructor = null
else if (nonSyntheticConstructors == 1 && primaryConstructor != null) {
candidateConstructors = new Constructor<?>[] {primaryConstructor};
}
else {
//如果方法进了这里, 就是没找到合适的构造方法
//1. 类定义了多个构造方法, 且没有 @Autowired , 则有可能会进这里
candidateConstructors = new Constructor<?>[0];
}
this.candidateConstructorsCache.put(beanClass, candidateConstructors);
}
}
}
//这里如果没找到, 则会返回 null, 而不会返回空数组
return (candidateConstructors.length > 0 ? candidateConstructors : null);
}
这个方法比较长,但是仔细看,是能看懂的。大致可以划分为几个步骤:
1. 获取类的所有构造方法
2. 遍历构造方法
|-> 只有一个无参构造方法,则返回 null
|-> 只有一个有参构造方法,则返回这个构造方法
|-> 有多个构造方法且没有 @Autowired, 此时 spring 则会蒙圈了,不知道使用哪一个了。这里的后置处理器,翻译过来,叫智能选择构造方法后置处理器.
当选择不了的时候,干脆返回 null
|-> 有多个构造方法,且在其中一个方法上标注了 @Autowired , 则会返回这个标注的构造方法
|-> 有多个构造方法,且在多个方法上标注了 @Autowired, 则 spring 会抛出异常,spring 会认为,你指定了几个给我,是不是你弄错了
注:
这地方有个问题需要注意一下,如果你写了多个构造方法,且没有写 无参构造方法,那么此处返回 null,
在回到 createBeanInstance 方法中,如果不能走 autowireConstructor (), 而走到 instantiateBean () 中去的话,会报错的.
因为类已经没有无参构造函数了
关于jmeter beanshell Typed variable declaration : Object constructor错误和jmeter beanshell sampler的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于2019CVPR:Classification-Reconstruction Learning for Open-Set Recogition(Abstract)、angular – 无法解析AuthenticationService的所有参数:([object Object],?,[object Object])、asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported、Bean 后置处理器 - SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors等相关内容,可以在本站寻找。
本文标签: