如何为几个类(Java、Spring)创建commons方法?
我的控制器中有两个方法,我应该在每个控制器中插入它们。这些方法的代码根据控制器的不同而变化 例如,我有:如何为几个类(Java、Spring)创建commons方法?,java,spring,methods,Java,Spring,Methods,我的控制器中有两个方法,我应该在每个控制器中插入它们。这些方法的代码根据控制器的不同而变化 例如,我有: private T1 variantDTO(Variant variant, T2 entity) { if (variant == null) variant = Variant.DEFAULT; switch (variant) { case ID: return T3.toIdDTO(entity)
private T1 variantDTO(Variant variant, T2 entity) {
if (variant == null) variant = Variant.DEFAULT;
switch (variant) {
case ID:
return T3.toIdDTO(entity);
default:
return T3.toDTO(entity);
}
}
private List<? extends T1> variantDTOList(Variant variant, List<T2> entityList) {
if (variant == null) variant = Variant.DEFAULT;
switch (variant) {
case ID:
return T3.toIdDTOList(entityList);
default:
return T3.toDTOList(entityList);
}
}
然后:
//...
case ID:
return entityMapper.toIdDTOList(entityList);
//...
我不明白怎么做
你能帮我吗?我该怎么办?当我想改变这些方法时,我应该在几个控制器中进行。这很难
更新:
我尝试使用这些方法创建一个公共参数类,我希望在控制器中继承这些方法。但是我在方法(toidTo,toDTO,…)中得到错误
DTO:
使用继承怎么样?一个简单的方法是创建一个BaseController,并将其扩展到具有公共功能的其他控制器。或者创建一个实用程序来保存这段代码,并可以在任何地方使用。@RobbyCornelissen我添加了我试图做的事情。你能看见吗?我得到一个错误。@AshutoshSharma我添加了我试图做的事情。你能看见吗?我收到一个错误。@AlexanderLopatin您能添加一个最小的工作代码来复制这个吗?
//...
case ID:
return entityMapper.toIdDTOList(entityList);
//...
public class VariantController<Abstract, Entity, Mapper> {
@Autowired
Mapper mapper;
private Abstract variantDTO(Variant variant, Entity entity) {
if (variant == null) variant = Variant.DEFAULT;
switch (variant) {
case ID:
return mapper.toIdDTO(entity);
default:
return mapper.toDTO(entity);
}
}
private List<? extends Abstract> variantDTOList(Variant variant, List<Entity> entityList) {
if (variant == null) variant = Variant.DEFAULT;
switch (variant) {
case ID:
return mapper.toIdDTOList(entityList);
default:
return mapper.toDTOList(entityList);
}
}
}
@RestController
@RequestMapping("/api/groupsparameters")
public class GroupParametersController {
@Autowired
private GroupParameterService groupParameterService;
@Autowired
private GroupParameterMapper groupParameterMapper;
@GetMapping("/{id}")
public ResponseEntity<? extends GroupParameterAbstract> get(@PathVariable Long id,
@RequestParam(value = "variant", required = false) Variant variant) throws EntityNotFoundException {
GroupParameter groupParameter = groupParameterService.findById(id);
return new ResponseEntity<>(variantDTO(variant, groupParameter), HttpStatus.OK);
}
@GetMapping
public ResponseEntity<List<? extends GroupParameterAbstract>> findAll(@RequestParam(value = "variant", required = false) Variant variant,
@RequestParam(value = "search", required = false) String search) {
List<GroupParameter> groupParameterList = groupParameterService.findAll();
return new ResponseEntity<>(variantDTOList(variant, groupParameterList), HttpStatus.OK);
}
private GroupParameterAbstract variantDTO(Variant variant, GroupParameter entity) {
if (variant == null) variant = Variant.DEFAULT;
switch (variant) {
case ID:
return groupParameterMapper.toIdDTO(entity);
default:
return groupParameterMapper.toDTO(entity);
}
}
private List<? extends GroupParameterAbstract> variantDTOList(Variant variant, List<GroupParameter> entityList) {
if (variant == null) variant = Variant.DEFAULT;
switch (variant) {
case ID:
return groupParameterMapper.toIdDTOList(entityList);
default:
return groupParameterMapper.toDTOList(entityList);
}
}
}
@Mapper(componentModel = "spring", uses = { TypeReportService.class})
public interface GroupParameterMapper {
//GroupParatemerDTO
GroupParameterDTO toDTO(GroupParameter groupParameter);
List<GroupParameterDTO> toDTOList(List<GroupParameter> groupParameterList);
//GroupParameterIdDTO
@Mapping(target = "typeReportId", source = "typeReport.id")
GroupParameterIdDTO toIdDTO(GroupParameter groupParameter);
List<GroupParameterIdDTO> toIdDTOList(List<GroupParameter> groupParameterList);
@Mapping(target = "id", ignore = true)
@Mapping(target = "typeReport", source ="typeReportId", qualifiedByName = { "findTypeReportById" })
GroupParameter fromIdDTO(GroupParameterIdDTO groupParameterIdDTO) throws EntityNotFoundException;
//GroupParameter
@Mapping(target = "id", ignore = true)
@Mapping(target = "common", ignore = true)
@BeanMapping(nullValuePropertyMappingStrategy = IGNORE)
void fill(GroupParameter source, @MappingTarget GroupParameter target);
}
@Entity
@Data
public class GroupParameter {
@Id
@GeneratedValue(generator = ID_GENERATOR)
private Long id;
private String title;
private boolean common;
@ManyToOne
@JoinColumn(name = "TYPE_REPORT_ID", nullable = false)
private TypeReport typeReport;
}
@Data
public abstract class GroupParameterAbstract {
private Long id;
private String title;
private boolean common;
}
public class GroupParameterDTO extends GroupParameterAbstract {
}
@Data
public class GroupParameterIdDTO extends GroupParameterAbstract {
private Long typeReportId;
}