Swagger-codegen: [рдЯрд╛рдЗрдкрдкреНрд░рддрд┐/рдХреЛрдгреАрдп реи] рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛрдИ рдЪреЗрдХ рдЖрдЙрдЯ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдирд╣реАрдВ рд╣реИ ...

рдХреЛ рдирд┐рд░реНрдорд┐рдд 12 рджрд┐рд╕ре░ 2016  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: swagger-api/swagger-codegen

рд╡рд┐рд╡рд░рдг

рдореБрдЭреЗ typescript/angular2 рдХреЛрдбрдЬреЗрди рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рд╣реИ, рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдЕрдЬреАрдм рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

/**
     * Add user
     * 
     * <strong i="8">@param</strong> user username
     * <strong i="9">@param</strong> passwd passwd
     */
    public create(user: string, passwd: string, extraHttpRequestParams?: any): Observable<{}> {
        return this.createWithHttpInfo(user, passwd, extraHttpRequestParams)
            .map((response: Response) => {
                if (response.status === 204) {    <<<<<<<<<<<<<<<<<
                    return undefined;
                } else {
                    return response.json();
                }
            });
    }

    /**
     * User exists
     * 
     * <strong i="10">@param</strong> user username
     */
    public exists(user: string, extraHttpRequestParams?: any): Observable<boolean> {
        return this.existsWithHttpInfo(user, extraHttpRequestParams)
            .map((response: Response) => {
                if (response.status === 204) {    <<<<<<<<<<<<<<<<<<<<<
                    return undefined;
                } else {
                    return response.json();
                }
            });
    }

рдХреЛрдбрдЬрди рдХреЗрд╡рд▓ response.status === 204 рдЬрд╛рдВрдЪ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдЕрдиреНрдп рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдореЗрд░реА рд╕реНрд╡реИрдЧрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

    <strong i="16">@PUT</strong>
    @ApiOperation(value = "Add user")
    @ApiResponses(value = {
      @ApiResponse(code = 400, message = "Specified 'username' already exists on Living Commty."),
      @ApiResponse(code = 401, message = "Specified 'username' has no a valid mail form."),
      @ApiResponse(code = 402, message = "Specified 'passwd' is too short.")
    })
    public abstract Response create(...

    <strong i="17">@GET</strong>
    @ApiOperation(value = "User exists", response = Boolean.class)
    @ApiResponses(value = {
      @ApiResponse(code = 400, message = "Invalid user information specified") 
    })
    public abstract Response exists(
рд╕реНрд╡реИрдЧрд░-рдХреЛрдбрдЬреЗрди рд╕рдВрд╕реНрдХрд░рдг

2.2.3-рд╕реНрдиреИрдкрд╢реЙрдЯ

рд╕реНрд╡реИрдЧрд░ рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА рдпрд╛ url
swagger: '2.0'
info:
  description: desc
  version: 1.0.2
  title: Living API
  termsOfService: 'http://swagger.io/terms/'
  contact:
    name: [email protected]
  license:
    name: Apache 2.0
    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
host: localhost
basePath: /commty/cmng
tags:
  - name: users
schemes:
  - http
paths:
  /users:
    get:
      tags:
        - users
      summary: User exists
      description: ''
      operationId: exists
      produces:
        - application/json
      parameters:
        - name: user
          in: header
          description: username
          required: true
          type: string
      responses:
        '200':
          description: successful operation
          schema:
            type: boolean
        '400':
          description: Invalid user information specified
    put:
      tags:
        - users
      summary: Add user
      description: ''
      operationId: create
      produces:
        - application/json
      parameters:
        - name: user
          in: header
          description: username
          required: true
          type: string
        - name: passwd
          in: header
          description: passwd
          required: true
          type: string
      responses:
        '400':
          description: Invalid user information specified
рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреБрдХреНрдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди

рдЬрд╛рд╡рд╛ рдЬрд╛рд░ рдЙрддреНрдкрдиреНрди рдореИрдВ "\ рдЕрдХрдбрд╝-codegen-CLI \ рд▓рдХреНрд╖реНрдп \ рдЕрдХрдбрд╝-codegen-cli.jarред" http: // localhost : 8082 / commty / cmng / swagger.json -l рдЯрд╛рдЗрдкрдкреНрд░рддрд┐-angular2 -v

TypeScript Question

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@jeusdi HTTP рд╕реНрдерд┐рддрд┐ рдХреЛрдб 204 рдХрд╛ рдЕрд░реНрде рд╣реИ "рдХреЛрдИ рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ" (рд╕рдВрджрд░реНрдн: https://httpstatuses.com/204), рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ undefined рдХреНрдпреЛрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@ wing328 рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рдЖрд╕рдкрд╛рд╕ рдерд╛: рдХреЛрдбрдЬрди @ApiResponses рдПрдиреЛрдЯреЗрд╢рди рд╕рд╛рдордЧреНрд░реА рд▓реЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдзреНрдпрд╛рди рдХреНрдпреЛрдВ рд░рдЦрддрд╛ рд╣реИ:

@ApiResponses (рдорд╛рди = {
@ApiResponse (рдХреЛрдб = 400, рд╕рдВрджреЗрд╢ = "рдирд┐рд░реНрджрд┐рд╖реНрдЯ 'рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо' рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рд╡рд┐рдВрдЧ рдХрдореЗрдЯреА рдкрд░ рдореМрдЬреВрдж рд╣реИред"),
@ApiResponse (рдХреЛрдб = 401, рд╕рдВрджреЗрд╢ = "рдирд┐рд░реНрджрд┐рд╖реНрдЯ 'рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо' рдХрд╛ рдХреЛрдИ рдорд╛рдиреНрдп рдореЗрд▓ рдлрд╝реЙрд░реНрдо рдирд╣реАрдВ рд╣реИред"),
@ApiResponse (рдХреЛрдб = 402, рд╕рдВрджреЗрд╢ = "рдирд┐рд░реНрджрд┐рд╖реНрдЯ 'рдкрд╛рд╕рд╡рд╛рд░реНрдб' рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред")
})

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, create рдФрд░ exists рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛:

@Path(value = "/users")
@Produces({"application/json"})
@Api(value = "/users")
public interface IUserCommtyEndpoint {

    <strong i="16">@PUT</strong>
    @ApiOperation(value = "Add user")
    @ApiResponses(value = {
      @ApiResponse(code = 400, message = "Specified 'username' already exists on Living Commty."),
      @ApiResponse(code = 401, message = "Specified 'username' has no a valid mail form."),
      @ApiResponse(code = 402, message = "Specified 'passwd' is too short.")
    })
    public abstract Response create(
        @HeaderParam("user")
        @ApiParam(value = "username", required = true)
        @NotNull(message = "user.username.notnull")
        @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="{user.username.email}")
            String username,
        @HeaderParam("passwd")
        @ApiParam(value = "passwd", required = true)
        @NotNull(message = "user.passwd.notnull")
        @Size(min = 6, max = 20, message = "{username.passwd.size}")
            String passwd
    ) throws UsernameAlreadyExistsCommtyException, RepositorySystemException;

    <strong i="17">@GET</strong>
    @ApiOperation(value = "User exists", response = Boolean.class)
    @ApiResponses(value = {
      @ApiResponse(code = 400, message = "Invalid user information specified") 
    })
    public abstract Response exists(
        @HeaderParam("user")
        @ApiParam(value = "username", required = true)
        @NotNull(message = "user.username.notnull")
        @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="{user.username.email}")
            String username
    );

}

рдпреЗ рдЕрдкрд╡рд╛рдж рд╣реИрдВ UsernameAlreadyExistsCommtyException , RepositorySystemException , javax.validation.ValidationException ред рдЙрди рд╕рднреА рдХреЛ JAXRS рдореИрдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

<strong i="24">@Provider</strong>
public class CommtyExceptionMapper implements ExceptionMapper<UsernameAlreadyExistsCommtyException> {

    <strong i="25">@Override</strong>
    public Response toResponse(UsernameAlreadyExistsCommtyException exception) {
        return Response
                .status(Response.Status.BAD_REQUEST.getStatusCode())
                .type(MediaType.APPLICATION_JSON)
                .entity(ErrorMessage.create(exception.getCode(), exception.getMessage()))
                .build();
    }

}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдмреЙрдбреА рдкрд░ рдПрдХ ErrorMessage {code, message} рдПрдореНрдмреЗрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ typescript\angular2 рдХреЛрдб рдкрд░ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ...

рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛?

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдХрд┐ рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ status рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ 401 рдХреЛ рдХрдм рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ рдЗрд╕реЗ рд╢рд░реАрд░ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдмрд╕ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 204 рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдЕрднреА рднреА рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ InlineBody200 рдХреЗ рдЕрд▓рд╛рд╡рд╛ InlineResponse200 ред InlineBody200 рд╕реНрдХреАрдорд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдФрд░ InlineResponse200 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реА рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВ рдХреЛрдгреАрдп Reponse рдХреА рддрд░рд╣ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдХрд╛ .json() InlineBody200 рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдШ рд╣реИ:

type InlineResponse = InlineResponse200 | InlineResponse401 | etc

DefaultApi рдореЗрдВ рдХреЙрд▓ рдПрдХ Observable<InlineResponse> рд▓реМрдЯрд╛ рд╕рдХрддреА рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдПрдХ InlineResponse200 | InlineResponse401 | etc рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА рдЬреЛ рдХреЛрдгреАрдп 2 рдЖрдкреВрд░реНрддрд┐ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dylan-colaco picture dylan-colaco  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wing328 picture wing328  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

justwy picture justwy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dganoff picture dganoff  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cameronwh picture cameronwh  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ