简体   繁体   English

如何在 Java REST API 中向 GetMapping 添加逻辑

[英]How to add logic to a GetMapping in Java REST API

I am trying to implement a very simple REST API with Spring Boot.我正在尝试使用 Spring 引导实现一个非常简单的 REST API。 In a GET Request I want to do a very basic transliteration.在 GET 请求中,我想做一个非常基本的音译。 So the requestor will have to send an input string and transliteration string.所以请求者必须发送一个输入字符串和音译字符串。

Those parameters should be passed to my method, that returns a transliteration.这些参数应该传递给我的方法,该方法返回一个音译。 The Response should look like this:响应应如下所示:

"input": ...
"transliterationrule": ...
"transliteration": ...

To do so, I created a java spring boot project with the following classes:为此,我使用以下类创建了 java spring 引导项目:

  1. Transliteration class音译class

     import com.ibm.icu.text.Transliterator;

    public class Transliteration {公共class音译{

     private final String input; private final String transliterationRule; public Transliteration(String input, String transliterationRule) { this.input = input; this.transliterationRule = transliterationRule; } public String transliterateString(){ Transliterator transliterator = Transliterator.getInstance(this.transliterationRule); return transliterator.transliterate(this.input); } public String getInput(){ return input; } public String getTransliterationRule(){ return transliterationRule; }

    } }

And controller class:和 controller class:

@RestController
public class TransliterationController {

    @GetMapping("/transliteration")
    public Transliteration transliteration(@RequestParam(value="input", required=false, defaultValue="TestString") String input,
    @RequestParam(value="rule", required=false, defaultValue="Any-Latin") String transliterationRule) {
        return new Transliteration(input, transliterationRule);
    }

}

Can somebody please explain me, how I can actually pass these parameters to my method transliterateString()?有人可以解释一下,我如何将这些参数传递给我的方法 transliterateString()? And how can I add the method result do the request?以及如何添加方法结果来完成请求?

Change your controller's method to return ResponseEntity and wrap a TransliterationResponse.更改控制器的方法以返回 ResponseEntity 并包装 TransliterationResponse。 TransliterationResponse is a dto holding "input": ... "transliterationrule": ... "transliteration": ... TransliterationResponse 是一个 dto,它持有 "input": ... "transliterationrule": ... "transliteration": ...

    @GetMapping("/transliteration")
public ResponseEntity<TransliterationResponse> transliteration(@RequestParam(value="input", required=false, defaultValue="TestString") String input,
@RequestParam(value="rule", required=false, defaultValue="Any-Latin") String transliterationRule) {
    // do your business logic
    //build the response dto
    TransliterationResponse dto = new TransliterationResponse(input, transliterationrule, transliteration);
    ResponseEntity.status(HttpStatus.OK).body(dto);
}

Create a DTO class to contain all response values:创建一个 DTO class 以包含所有响应值:

public class TransliterationDTO {    
    @JsonProperty("input")
    private String input;
    @JsonProperty("transliterationRule")
    private String transliterationRule;
    @JsonProperty("transliteration")
    private String transliteration;

    public TransliterationDTO() {
    }

    public TransliterationDTO(String input, String transliterationRule, String transliteration) {
        this.input = input;
        this.transliterationRule = transliterationRule;
        this.transliteration = transliteration;
    }

    // Getters and Setters
}

Update your controller method to return a ResponseEntity:更新您的 controller 方法以返回 ResponseEntity:

@RestController
public class TransliterationController {

    @GetMapping("/transliteration")
    public ResponseEntity<TransliterationDTO> transliteration(@RequestParam(value="input", required=false, defaultValue="TestString") String input,
                                           @RequestParam(value="rule", required=false, defaultValue="Any-Latin") String transliterationRule) {
        Transliteration t = new Transliteration(input, transliterationRule);
        return ResponseEntity.ok(new TransliterationDTO(t.getInput(), t.getTransliterationRule(), t.getTransliteration));
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM