如何在JavaRESTAPI中向GetMapping添加逻辑

如何在JavaRESTAPI中向GetMapping添加逻辑,java,rest,spring-mvc,Java,Rest,Spring Mvc,我正在尝试用SpringBoot实现一个非常简单的RESTAPI。在GET请求中,我想做一个非常基本的音译。因此请求者必须发送一个输入字符串和音译字符串 这些参数应该传递给我的方法,该方法返回一个音译。响应应如下所示: "input": ... "transliterationrule": ... "transliteration": ... 为此,我使用以下类创建了一个java spring引导项目: 音译类 import com

我正在尝试用SpringBoot实现一个非常简单的RESTAPI。在GET请求中,我想做一个非常基本的音译。因此请求者必须发送一个输入字符串和音译字符串

这些参数应该传递给我的方法,该方法返回一个音译。响应应如下所示:

"input": ...
"transliterationrule": ...
"transliteration": ...
为此,我使用以下类创建了一个java spring引导项目:

  • 音译类

     import com.ibm.icu.text.Transliterator;
    
    公共类音译{

     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;
     }
    
    }

  • 和控制器类:

    @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);
        }
    
    }
    

    有人能给我解释一下,我如何将这些参数传递给我的方法transliterateString()?如何将方法结果添加到请求中?

    更改控制器的方法以返回ResponseEntity并包装一个音译响应。音译应答是一种dto保持 “输入”:。。。 “音译规则”:。。。 “音译”:

    @GetMapping(“/音译”)
    公共响应性音译(@RequestParam(value=“input”,required=false,defaultValue=“TestString”)字符串输入,
    @RequestParam(value=“rule”,required=false,defaultValue=“Any拉丁文”)字符串音译规则){
    //做你的商业逻辑
    //构建响应dto
    音译应答dto=新的音译应答(输入,音译规则,音译);
    响应状态(HttpStatus.OK)。主体(dto);
    }
    
    更改控制器的方法以返回ResponseEntity并包装音译响应。音译应答是一种dto保持 “输入”:。。。 “音译规则”:。。。 “音译”:

    @GetMapping(“/音译”)
    公共响应性音译(@RequestParam(value=“input”,required=false,defaultValue=“TestString”)字符串输入,
    @RequestParam(value=“rule”,required=false,defaultValue=“Any拉丁文”)字符串音译规则){
    //做你的商业逻辑
    //构建响应dto
    音译应答dto=新的音译应答(输入,音译规则,音译);
    响应状态(HttpStatus.OK)。主体(dto);
    }
    
    创建一个DTO类以包含所有响应值:

    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
    }
    
    更新控制器方法以返回响应属性:

    @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));
        }
    }
    
    @RestController
    公共类音译控制器{
    @GetMapping(“/音译”)
    公共响应性音译(@RequestParam(value=“input”,required=false,defaultValue=“TestString”)字符串输入,
    @RequestParam(value=“rule”,required=false,defaultValue=“Any拉丁文”)字符串音译规则){
    音译t=新的音译(输入,音译规则);
    返回ResponseEntity.ok(新的音译dto(t.getInput(),t.getTranscriptionRule(),t.getTranscription));
    }
    }
    
    创建一个DTO类以包含所有响应值:

    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
    }
    
    更新控制器方法以返回响应属性:

    @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));
        }
    }
    
    @RestController
    公共类音译控制器{
    @GetMapping(“/音译”)
    公共响应性音译(@RequestParam(value=“input”,required=false,defaultValue=“TestString”)字符串输入,
    @RequestParam(value=“rule”,required=false,defaultValue=“Any拉丁文”)字符串音译规则){
    音译t=新的音译(输入,音译规则);
    返回ResponseEntity.ok(新的音译dto(t.getInput(),t.getTranscriptionRule(),t.getTranscription));
    }
    }
    
    API方法(在控制器中)可能会返回字符串或其他数据对象,而不是包含业务逻辑的音译对象。一个好的开始是创建一个新类来保存输出数据(输入、规则、音译)。您可以让控制器方法返回该对象或其字符串序列化。您的API方法(在控制器中)可能应该返回字符串或其他数据对象,而不是包含业务逻辑的音译对象。一个好的开始是创建一个新类来保存输出数据(输入、规则、音译)。您可以让控制器方法返回该对象或其字符串序列化。谢谢!!我现在知道了谢谢!!我现在知道了,谢谢你!现在开始工作了,谢谢!它正在工作