コントローラレイヤ符号化仕様

図1に示すように、コントローラ層

MVCコントローラの設計層は、制御層に属し;に設計された:要求を受け入れ、要求に応答するため、層は、可能な限り薄く、ビジネス・プロセスに関連するコードを書く避けるために。

設計モードの開発の前端と後端とを分離し、それが推奨され@RestController組み合わせ@ResponseBody + @Controller使用に対応する注釈を、。

1)@RestController Controllerクラスを除く注釈は、この方法では、コンテンツは、JSON文字列に戻るデフォルトのターンの内容を返された、またはHTML、viewresolver InternalResourceViewResolver動作不能設定、コントローラーのJSPページを返すことができない場合。

あなたが特定のページに戻る必要がある場合2)は、ジョブInternalResourceViewResolverビューリゾルバと@Controller使用する必要があります。
    あなたがJSON、XMLまたはページへのカスタムMEDIATYPEコンテンツを返すために必要がある場合は、対応するメソッド@ResponseBodyコメントを追加する必要があります。

要約すると、注釈@Controllerの使用は、対応する方法で、パーサは、リターンJSPのビューを解析するhtmlページ、および該当ページにジャンプして、ページには、JSONなどを返却する場合は、注釈を追加する必要が@ResponseBody


1)パス設定要求

(「/ページ」)を@PostMapping注釈を使用して、クラス名とメソッド名が上の追加することができます。

なお、異なるビジネス用途に応じて分け、無差別使用の走り書きを避けます。

2)設定要求モード

    通常のPOST / GET。使用注:@RequestMappingと@GetMapping @PostMapping。

    Spring4.3マッピング方法を簡素化する{@ GetMapping、@ PostMapping、@ PutMapping、@ DeleteMapping、@ PatchMapping}の導入及びHTTP共通セマンティクスよりよい方法注釈付き 

注釈HTTPは、具体的な処理方法にマップされます

    アノテーションを@GetMappingする(メソッド= RequestMethod.GET)を@RequestMapping略語である組み合わせのものです

    アノテーションを@PostMappingする(メソッド= RequestMethod.POST)を@RequestMapping略語である組み合わせのものです

3)設定要求パラメトリック

フォーム提出、直接または特定のパラメータ名VOは、受信しました。

@Controller
public class LoginController {

    @RequestMapping(value = "login", method = RequestMethod.POST)
    public String login(UserVO user){
        System.out.println("POJO: " + user.getClass().getName() + 
                ", hash code: " + user.hashCode() + ", " + user.toString());
        return "redirect:/";
    }

}

@RequestParam

@RequestParam(値= ""、必要=真、はdefaultValue = "")

@RequestParamは、3つの属性があります。

(1)値:リクエストパラメータ名(設定されなければなりません)

(2)必要:デフォルトは真である必要があれば、それは、例外が(オプション)スローされていない場合、すなわち、要求は、パラメータを含める必要があります

(3)はdefaultValue:値が設定されている場合は、デフォルト値、自動的にfalseに設定所要

@ApiOperation(value = "根据id查询") 
@PostMapping("/show")
public Responses show(@RequestParam(value="userId",defaultValue="-1") Long userId) {
    Record data = recordService.getOne(vo.getId());
    return Responses.success(data);

}

のn-提出し、注釈の@RequestBodyを使用しています。

バックエンド(リクエストボディデータ)に渡された遠位JSON文字列データを受信するため@RequestBody主POSTメソッドは、モード要求なし体を取得ので、GET遠位提出を使用することができない、@RequestBodyデータを受信使用しますデータはではなく、POSTメソッドで提出しました。)同じ受信機のバックエンド方式では、RequestBody及び@RequestParam()を同時に使用することができる@、@ RequestBodyだけで多くても1つ、及び@RequestParam(持つことができるより多くを有することができます。

注:リクエスト、唯一requestBody;リクエストが複数RequestParamを持つことができます。

 @ApiOperation(value = "根据id查询") 
 @PostMapping("/get")
 public Responses getOne(@Validated @RequestBody IdVO vo){
     Record data = recordService.getOne(vo.getId());
     return Responses.success(data);
 }

athVariable

@RestController
@RequestMapping("/")
public class ChineseDrugController {
	@ResponseBody
	@RequestMapping(value = "/{name}")
	public String showName(@PathVariable String name, @PathVariable(value = "name", required = false) String sex) {
		return "Hello " + name + sex;
	}

@fthfrm

URL:http://127.0.0.1:8080/sexvalue/namevalue?name=唐&セックス=男

@RestController
@RequestMapping(value = "/{sex}")
public class ChineseDrugController {
	@ResponseBody
	@RequestMapping(value = "/{name}")
	public String showName(@PathVariable(value = "name") String name, @PathParam(value = "sex") String sex) {
		return "Hello " + name + " " + sex;
	}
}

注意:上記のコードはちょうど良い柔軟性の機能を示すことであるので、実際の開発には、任意の使用を避けること。

4)検証要求パラメータ

パラメータチェック

①自動校正パラメータは注釈のスプリングコンテックスという効果を取るように、@Validatedアノテーションを使用して、

②voクラスカスタムなど@NotNull、などすべての種類を、確認してください、彼はここでのjavax検証-APIの注釈の下で繰り返されていません。

③プログラムレベルチェック。

実施例の方法

@ApiOperation(value = "应用类型和应用关系绑定")
@PostMapping("/applicationTypeBind")
public Boolean applicationTypeBind(@Validated @RequestBody ApplicationBindVO vo){
    applicationTypeService.applicationTypeBind(vo);
    return true;
}

例に対応するVOクラス

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Set;

@Data
@ApiModel(value = "ApplicationBindVO",description = "关系绑定vo")
public class ApplicationBindVO {

    @NotNull
    @ApiModelProperty("应用类型id")
    private Long typeId;

    @ApiModelProperty("应用id集合")
    private List<Long> applicationIdList;
}

 5)パラメトリック設計パラメータに

ベースのビジネスは、可能な限り統一フォーマットとしてであってもよいです。

遠位の応答パラメータ(APP / PC)、典型的には、再カプセル化層、便利な単一のフロントエンドは、以下を返します

Responses.success(data);
import com.fasterxml.jackson.annotation.JsonView;
import com.myfutech.common.util.enums.ResponseCode;
import com.myfutech.common.util.vo.BaseView;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

@ApiModel(value = "Responses",description = "响应信息")
public class Responses<T> {
   
 @JsonView({BaseView.class})
    @ApiModelProperty("响应编码")
    private String code;
    
    @JsonView({BaseView.class})
    @ApiModelProperty("响应消息")
    private String msg;
    
    @JsonView({BaseView.class})
    @ApiModelProperty("响应体")
    private T result;
    
    public static <T> Responses<T> success() {
        return new Responses(ResponseCode.SUCCESS_CODE, "", (Object)null);
    }

    public static <T> Responses<T> success(T result) {
        return new Responses(ResponseCode.SUCCESS_CODE, "", result);
    }

    public static <T> Responses<T> success(String msg, T result) {
        return new Responses(ResponseCode.SUCCESS_CODE, msg, result);
    }

    public static <T> Responses<T> error(String msg) {
        return new Responses(ResponseCode.ERROR_CODE, msg, (Object)null);
    }

    public static <T> Responses<T> error(ResponseCode code) {
        return new Responses(code, code.getDefaultMsg(), (Object)null);
    }

    public static <T> Responses<T> error(ResponseCode code, String msg) {
        return new Responses(code, msg, (Object)null);
    }

    public Responses() {
    }

    private Responses(ResponseCode code, String msg, T result) {
        this.code = code.getCode();
        this.msg = msg;
        this.result = result;
    }

    public String getCode() {
        return this.code;
    }

    public boolean notSuccess() {
        return !ResponseCode.SUCCESS_CODE.getCode().equals(this.code);
    }

    public String getMsg() {
        return this.msg;
    }

    public T getResult() {
        return this.result;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public void setResult(T result) {
        this.result = result;
    }
    
    
}

6)自動インターフェースドキュメントを生成します

    使用SwaggerAPI、

    共通アノテーション

//加载类名之上
@Api(tags = "日志相关接口", description="操作日志",
        consumes= MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces=MediaType.APPLICATION_JSON_UTF8_VALUE)


//加在方法名之上
@ApiOperation(value = "查询分页列表")

//加载实体或VO类名之上
@Data
@ApiModel(value = "ApprovalRoleModifyVO",description = "审批角色修改信息")
public class ApprovalRoleModifyVO{

 @Api:クラス、具体的な実施内容のクラスラベルに作用します。このクラスは、リソースの闊歩を示すフラグです。 

    パラメータ: 

    ①tags:あなたがタグを使用することができます()あなたの代わりにプロパティを使用するのでは、操作のために複数のタグのプロパティを設定することができます。 

    ②description:記述は、そのような効果を記述してもよいです。 

@ApiOperation:httpリクエストの動作を指示するための方法。

@ApiModel:メソッド、フィールド、または説明モデル属性の変更操作に関するデータ 

 図2に示すように、比較的標準的なコントローラクラスの例

package com.myfutech.employee.service.provider.ctrl;

import com.myfutech.common.util.Responses;
import com.myfutech.common.util.vo.IdVO;
import com.myfutech.common.util.vo.Page;
import com.myfutech.common.util.vo.Pageable;
import com.myfutech.employee.service.api.vo.response.record.RecordListVo;
import com.myfutech.employee.service.provider.model.Record;
import com.myfutech.employee.service.provider.service.RecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 *  相关接口
 */
@Api(tags = "日志相关接口", description="操作日志",
        consumes= MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
@RestController
@RequestMapping("/record")
public class RecordCtrl {


    private static final Logger log = LoggerFactory.getLogger(RecordCtrl.class);

    @Resource(name="recordService") 
    private RecordService recordService;

    @ApiOperation(value = "查询分页列表")
    @PostMapping("/page")
    public Page<RecordListVo> page( @RequestBody Pageable pageable){
        Page<RecordListVo> list = recordService.findConditionPage(pageable);
        return list;
    }
    @ApiOperation(value = "根据id查询") 
    @PostMapping("/get")
    public Responses getOne(@Validated @RequestBody IdVO vo){
        Record data = recordService.getOne(vo.getId());
        return Responses.success(data);
    }
    @ApiOperation(value = "新增") 
    @PostMapping("/add")
    public Responses add(@Validated(Record.Create.class) @RequestBody Record data){
        recordService.save(data);
        return Responses.success();
    }
    @ApiOperation(value = "更新") 
    @PostMapping("/update")
    public Responses update(@Validated(Record.Update.class) @RequestBody Record data){
        recordService.save(data);
        return Responses.success();
    }
    @ApiOperation(value = "删除") 
    @PostMapping("/delete")
    public Responses delete(@Validated @RequestBody IdVO vo){
        recordService.deleteById(vo.getId());
        return Responses.success();
    }
}

 

おすすめ

転載: blog.csdn.net/jiahao1186/article/details/90634764