gpt4 book ai didi

java - Spring MVC @RestController -> 无论我做什么,PUTting 结果都是 "400 Bad Request"

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:33 24 4
gpt4 key购买 nike

我有一个 Spring RestController,当我从它GET 数据时它工作得很好,但是当我尝试PUT 非常相同的数据时,我收到一个 400 Bad Request

这是我的 Controller 的最简单版本,应该仍然有效(我省略了 GET 方法):

@RestController
@RequestMapping("/configuration/ledstrips/{name}/display")
public class DisplayController {

@ResponseBody
@RequestMapping(method = RequestMethod.PUT, produces = { "application/hal+json" })
public DisplayResource setDisplay(@PathVariable String name, @RequestBody DisplayResource display) {

return display;
}
}

这是DisplayResource:

public class DisplayResource extends ResourceSupport {

private List<Color> pixels;

public List<Color> getPixels() {

return pixels;
}


public void setPixels(List<Color> pixels) {

this.pixels = pixels;
}
}

我几乎是从另一个分支复制这段代码,然后它就可以工作了!

我想不出来!

编辑

这是GET-方法:

@ResponseBody
@RequestMapping(method = RequestMethod.GET, produces = { "application/hal+json" })
public DisplayResource getDisplay(@PathVariable String name) {

LEDStripDTO ledStripDTO;

try {
ledStripDTO = ledStripDTOService.getDTO(name);
} catch (IOException | NullPointerException exception) {
throw new LoadFailedException("Error loading LED strip:", exception);
}

Link self = linkTo(methodOn(DisplayController.class).getDisplay(name)).withSelfRel();

DisplayResource displayResource = new DisplayResource();

displayResource.add(self);

try {
displayResource.setPixels(ledStripService.getPixels(ledStripDTO));
} catch (IOException | TimeoutException | AlreadyConnectedException | NotConnectedException exception) {
throw new LoadFailedException("Error getting Information from LED strip:", exception);
}

return displayResource;
}

它产生的结果(对于长度为 1 的 LED 灯条):

{
"pixels": [
{
"red": 0,
"green": 16,
"blue": 0
}
],
"_links": {
"self": {
"href": "http://localhost:8080/configuration/ledstrips/devled/display"
}
}
}

当我发送这个时,无论是否有 _links 段,我都会收到一个 400 错误。

最佳答案

因为它是一个 PUT,所以您定义了一个 produces,但没有定义一个 consumes。可能是端点不知道期望正文采用什么格式,这就是它拒绝它的原因。试试:

查看了您提供的源代码后,我发现 Color 类有一个需要参数的构造函数。由于此构造函数,Jackson 库提供的默认 ObjectMapper 将无法解码 JSON 字符串。尝试将默认构造函数与当前构造函数一起添加到 Color 类:

public Color(int red, int green, int blue) {

this.red = setColorLimits(red);
this.green = setColorLimits(green);
this.blue = setColorLimits(blue);
}

public Color() {}

关于java - Spring MVC @RestController -> 无论我做什么,PUTting 结果都是 "400 Bad Request",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31476638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com