当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot应用程序@RestController中获取信息的哪种模式更好?如何指定任何@映射?

通啸
2023-03-14
@PutMapping("{table}/{key}")
    public void update(@PathVariable("tables") String tableName,
                               @PathVariable("key") String key,
                               @RequestBody Entity entity) {
    ... 
    }
@PutMapping("{table}/{key}")
        public void update(@RequestBody Entity entity) {
        ... 
        }

问题一:不是不好的模式吗?它是很好的完美Rest服务还是我应该避免它?问题2:在本例中,我不使用@PathVariable,只需要将someWord/someOtherWord指定为@PutMapping Path。有没有什么方法可以在没有智能检查的情况下指定我应该使用的东西,比如any/any?

更新:架构的一个例子

public abstract class Validator<T> {
    public abstract void validate(T t);
}

public class FirstEntityValidator extends Validator<FirstEntity> {
     public void validate(FirstEntity entity){
     ...
     }
}

public class SecondEntityValidator extends Validator<SecondEntity> {
     public void validate(SecondEntity entity){
     ...
     }
}

public abstract class EntityService<T> {

    private Validator<T> validator;

    public EntityService(Validator<T> validator){
      this.validator = validator;
    }
}

public class FirstEntityService extends EntityService<FirstEntity> {

    public FirstEntityService(FirstEntityValidator<FirstEntity> validator){
       super(validator);
    }
}

public class SecondEntityService extends EntityService<SecondEntity> {

    public SecondEntityService(SecondEntityValidator<SecondEntity> validator){
       super(validator);
    }
}

共有1个答案

呼延英奕
2023-03-14

我会避免这样的事情。您应该像分离服务一样分离REST控制器。如果您只需要为一个实体更改一些内容,那么您就需要重构所有内容,或者生成一些难看的代码。

我认为您正在尝试做的是将存储库公开为REST WebService。Spring可以帮你处理这件事。查看以下内容:https://docs.spring.io/spring-data/rest/docs/current/reference/html/

使用接口。不要使用任何抽象类。在较大的项目中,这是不必要的,而且可能很难处理

public interface class Validator<T> {
  void validate(T t);
}

public class FirstEntityValidator implements Validator<FirstEntity> {
   public void validate(FirstEntity entity){
   ....
   }
}


public class SecondEntityValidator implements Validator<SecondEntity> {
   public void validate(SecondEntity entity){
   ....
   }
}

public interface EntityService{

 //your methods....

}

public class FirstEntityService implements EntityService{

    private FirstEntityValidator validator;

    public FirstEntityService(FirstEntityValidator validator){
        this.validator = validator;
    }

}
 类似资料:
  • 要获取请求URL,可以在堆栈溢出中找到以下方法。 第一种方法: 第二种方法: 第三种方法: 我不知道在spring boot应用程序中使用哪一个来获取请求URL。 如果我使用第三种方法,那么我是否需要在配置类中创建RequestContextListener的bean,如下所示?

  • 嗨,我尝试用InMemoryDao获取userDetailsService。但是我得不到,我试过@Autowired,@ Inject(userdailsservice,InMemoryDaoImpl,InMemoryManager...)但是我不能让它工作。 有公共类安全扩展WebSecurityC 只尝试了WebSecurityCon

  • 本文向大家介绍在React中如何引入图片?哪种方式更好?相关面试题,主要包含被问及在React中如何引入图片?哪种方式更好?时的应答技巧和注意事项,需要的朋友参考一下 第一种导入: import Img from "./images/1.png" 第二种直接获取图片: <img src={require("./images/1.png")} alt=""/>

  • 问题内容: 我正在编写一个在x86-32和x86-64 Linux中使用和进行反汇编的工具。问题是,尽管我能够分解libopcode,但无法获得任何指令信息。为了演示起见,我举了一个最小的例子来重现我的问题。该程序应从入口点反汇编到第一个/ 。 该代码有点被全局变量所破坏,为简洁起见,省略了错误检查等,但是应该清楚地说明问题。 可以使用以下内容构建此源。要执行成功的链接,需要将该软件包安装在本地计

  • 我有一个在网格窗格(2x8)中创建新文本字段的方法。我想知道,一旦它们被创建,我如何访问每个索引中的信息(如:0,0-1,0等)。 代码如下: 这就是我想做的:

  • 我有一个MVC6站点,它已部署为Azure Web应用程序。我已使用服务器资源管理器在Visual Studio中启用了所有跟踪/诊断选项。我正在尝试进行远程调试,但我在浏览器上只看到一个错误500,没有找到任何关于错误发生的确切位置的信息(或触发错误断点)。 在从Azure获取的文件日志中找不到任何错误跟踪。 我应该如何解决Azure Web应用程序中的错误500? 将“CustomErrors