0

我正在我的控制器类中创建我的 put 方法,但是我有很多不同的属性要设置是否有某种插件可以用来填充我所有的设置器

@PutMapping(path = "{documentId}")
public ResponseEntity<Document> updateDocument(
        @PathVariable(value = "documentId") String documentId,
        @Validated @RequestBody Document documentDetails) throws ResourceNotFoundException {
    Document document =  documentRepo.findById(documentId)
            .orElseThrow(() -> new ResourceNotFoundException("Document not found on :: "+ documentId));

    document.setTitle(documentDetails.getTitle());

    final Document updateDocument = documentRepo.save(document);
    return ResponseEntity.ok(updateDocument);
}
4

3 回答 3

2

您可能正在寻找龙目岛。基本上,您可以为您的类添加注释,Lombok 会为您生成设置器和其他内容。

于 2021-11-13T05:27:31.417 回答
0

您可以使用 Mapstruct 为这种情况创建映射。

package com.example.demo;

import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;

@Mapper(componentModel = "spring")
public interface DocumentMapper {
    void updateDocument(@MappingTarget Document target, Document source);
}

然后在你的控制器中使用它。

@RestController
@RequiredArgsConstructor
public class DocumentController {
    private final DocumentMapper documentMapper;

    @PutMapping
    public Document updateDocument(@RequestBody final Document documentDetails) {
        Document document = new Document(); // documentRepo.findById
        documentMapper.updateDocument(document, documentDetails);
        // documentRepo.save(document)
        return document;
    }
}
于 2021-11-13T06:32:45.160 回答
0

由于两个类具有相同的属性名称,因此这个 spring 实用程序将为您节省大量时间;

BeanUtils.copyProperties(source, target);

所以你会得到这个:

@PutMapping(path = "{documentId}")
public ResponseEntity<Document> updateDocument(
        @PathVariable(value = "documentId") String documentId,
        @Validated @RequestBody Document documentDetails) throws ResourceNotFoundException {
    Document document = documentRepo.findById(documentId)
            .orElseThrow(() -> new ResourceNotFoundException("Document not found on :: " + documentId));

    BeanUtils.copyProperties(documentDetails, document);
    // You can also ignore a particular property or properties
    // BeanUtils.copyProperties(documentDetails, document, "id");   
    final Document updateDocument = documentRepo.save(document);
    return ResponseEntity.ok(updateDocument);
}
于 2021-11-13T12:54:40.073 回答