我在Spring Boot应用程序中有 @RestController 。
@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) {
...
}
,并希望来自 @PathVariable 的信息将位于@RequestBody 内部。
原因:我有一个另一个@RestController ,我可以在其中收到AnotherEntity anotherEntity
。这种架构风格使我可以在服务层中创建通用层次
问题1 :这是一个不错的模式吗?完美的 REST 服务是否很好?还是应该避免使用它? 问题2 :在这种情况下,我不使用 @PathVariable ,而只需要指定 someWord / SomeOtherWord 作为 @PutMapping 路径。有没有某种方法可以指定 任何/任何 之类的东西,而无需intellij检查我应该使用它?
更新:架构示例
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);
}
}
答案 0 :(得分:2)
我会避免这样的事情。 您应该像分离服务那样分离REST控制器。 如果您只需要为一个实体更改某些内容,则无论如何都需要重构所有内容或生成一些难看的代码。
我认为您正在尝试将存储库公开为REST Web服务。 Spring可以为您解决这个问题。 看一下这个: https://docs.spring.io/spring-data/rest/docs/current/reference/html/
使用界面。 不要使用任何抽象类。 在较大的项目中,这是没有必要的,并且可能会非常困难
这样会更好:
_OPENMP = '201511'
OMP_DYNAMIC = 'FALSE'
OMP_NESTED = 'FALSE'
OMP_NUM_THREADS = '36'
OMP_SCHEDULE = 'DYNAMIC'
OMP_PROC_BIND = 'FALSE'
OMP_PLACES = ''
OMP_STACKSIZE = '139738199011328'
OMP_WAIT_POLICY = 'PASSIVE'
OMP_THREAD_LIMIT = '4294967295'
OMP_MAX_ACTIVE_LEVELS = '2147483647'
OMP_CANCELLATION = 'FALSE'
OPENMP DISPLAY ENVIRONMENT BEGIN
_OPENMP='201611'
[host] OMP_ALLOCATOR='omp_default_mem_alloc'
[host] OMP_CANCELLATION='FALSE'
[host] OMP_DEFAULT_DEVICE='0'
[host] OMP_DISPLAY_ENV='TRUE'
[host] OMP_DYNAMIC='FALSE'
[host] OMP_MAX_ACTIVE_LEVELS='2147483647'
[host] OMP_MAX_TASK_PRIORITY='0'
[host] OMP_NESTED='FALSE'
[host] OMP_NUM_THREADS: value is not defined
[host] OMP_PLACES: value is not defined
[host] OMP_PROC_BIND='false'
[host] OMP_SCHEDULE='static'
[host] OMP_STACKSIZE='4M'
[host] OMP_THREAD_LIMIT='2147483647'
[host] OMP_TOOL='enabled'
[host] OMP_TOOL_LIBRARIES: value is not defined
[host] OMP_WAIT_POLICY='PASSIVE'
OPENMP DISPLAY ENVIRONMENT END