[英]Spring MVC @RestController -> PUTting results in “400 Bad Request” no matter what I do
我有一个春天RestController当我伟大的工程GET
从它的数据,但是当我尝试PUT
非常相同的数据 ,我得到一个400 Bad Request
。
这是我的控制器的最简单版本应该仍然有用(我遗漏了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
-Method:
@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
旁边的Color
类:
public Color(int red, int green, int blue) {
this.red = setColorLimits(red);
this.green = setColorLimits(green);
this.blue = setColorLimits(blue);
}
public Color() {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.