簡體   English   中英

Spring API REST Controller 在 POST 方法后返回 HTTP 406 而不是 HTTP 201

[英]Spring API REST Controller returning HTTP 406 instead of HTTP 201 after POST method

我正在構建和測試一個簡單的 Spring Boot API REST 教程。 我遇到了一個我試圖理解的問題。 調用 POST 方法創建和保留新實體時,我收到 HTTP 406(不可接受)。

問題是實體是持久化的,但對客戶端的響應不是預期的(在這種情況下,HTTP 201 CREATED with URI)。

Tutorial 和 TutorialDto 類具有完全相同的屬性。 這是定義:

public class TutorialDto {
    private long id;
    private String title;
    private String description;
    private boolean published;

...
}

這是我在@RestController class 中的 POST 方法:

@PostMapping("/tutorial")
public ResponseEntity.BodyBuilder createTutorial(@RequestBody final TutorialDto tutorialDto) {
    final TutorialDto createdTutorial = tutorialService.add(tutorialDto);
    return ResponseEntity.created(URI.create(String.format("tutorial/%d", createdTutorial.getId())));
}

這是創建實體的@Service 方法:

@Transactional
public TutorialDto add(final TutorialDto tutorialDto) {
    final Tutorial createdTutorial = tutorialRepository.save(modelmapper.map(tutorialDto, Tutorial.class));
    return Optional.of(modelmapper.map(createdTutorial, TutorialDto.class))
            .orElseThrow(() -> new TutorialCreationException(
                    String.format("Tutorial: %s could not be created", tutorialDto.getTitle()))
            );
}

這是請求正文:

{
    "title": "tutorial",
    "description": "This is the first created tutorial"
}

這是響應主體:

{
    "timestamp": "2022-04-16T00:40:36.626+00:00",
    "status": 406,
    "error": "Not Acceptable",
    "path": "/api/v1/tutorial"
}

返回“ResponseEntity.created”后,我在 controller 方法末尾收到 HTTP 406 響應。

提前致謝。

看起來您錯誤地使用了 ResponseEntity.BodyBuilder。 這是一個例子

因此,您的 controller 代碼應如下所示:

@PostMapping("/tutorial")
public ResponseEntity createTutorial(@RequestBody final TutorialDto tutorialDto) {
    final TutorialDto createdTutorial = tutorialService.add(tutorialDto);
    return ResponseEntity.created(URI.create(String.format("tutorial/%d", createdTutorial.getId()))).body(createdTutorial);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM