Angular HttpClient simplifier
typescript
export interface ISerializer {
serialize(data: any): any;
deserialize(data: any, T?: { new (): any; }): any;
}
`
$3
Native angular HttpClient query string params builder was changed to custom (WebApiHttpParams) due incorrect query string binding with asp.net web api. WebApiHttpParams requrcively analyses any complex object and builds correct query string.
`typescript
it('should serialize complex object to query string', () => {
const complexObj: any = {
numeric: 1,
float: 1.40,
string: 'text',
subObject: {
prop1: 'a',
prop2: 'b'
},
arrayPrimitive: [1],
arrayObjects: [
{
value: 1
},
{
value: 2
}
]
};
const params = new WebApiHttpParams({ fromObject: complexObj });
expect(params.toString()).toEqual('numeric=1&float=1.4&string=text&subObject[prop1]=a&subObject[prop2]=b&arrayPrimitive=1&arrayObjects[value]=1&arrayObjects[value]=2');
});
`
Installation
Installation via npm npm install @lcgroup.core/api.
Example
Example json2typescript library:
`typescript
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ApiModule, SERIALIZER_OPTIONS } from '@lcgroup.core/api';
import { AppComponent } from './app.component';
import { JsonConvert, ValueCheckingMode } from 'json2typescript';
export function serializerFactory() {
const jsonConverter = new JsonConvert();
jsonConverter.ignorePrimitiveChecks = true;
jsonConverter.valueCheckingMode = ValueCheckingMode.ALLOW_NULL;
return jsonConverter;
}
@NgModule({
declarations: [
AppComponent,
],
imports: [
CommonModule,
BrowserModule,
ApiModule.forRoot(
'/api',
{
serializeProvider: {
provide: SERIALIZER_OPTIONS,
useFactory: serializerFactory
}
}
)
],
bootstrap: [AppComponent]
})
export class AppModule { }
`
Deserialize json to ClientsFilterResult:
`typescript
@Injectable()
export class ClientsService {
constructor(private api: Api) { }
public getClientsList(filter: ClientInfoFilterDto): Observable {
return this.api.post( /clients/search, filter, { deserializeTo: ClientsFilterResult });
}
}
``