繁体   English   中英

Spring MVC @RestController - >无论我做什么,PUTting都会导致“400 Bad Request”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM