2017-10-11 155 views
0

我正在使用Spring Boot编写REST API。我的一个端点处理POST请求,该请求使用JSON请求主体。同时,另一个参数在URL中提供。为什么406发送包含路径变量和请求正文的请求

@RequestMapping(
      value = "/cycle?&visit={visitid}", 
      method = RequestMethod.POST, 
      consumes = "application/json", 
      produces = "text/plain") 
    @ResponseStatus(HttpStatus.CREATED) 
    public String persistCycleCount(@Valid @PathVariable Integer visitId, @Valid @RequestBody CycleCount cycleCount) 

实体CycleCount看起来是这样的: @Entity @Table(name = “CYCLE_CNT_HIST”)

public class CycleCount implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "CYCLE_CNT_ID") 
    private long id; 

    @NotNull 
    @Column(name = "DOOR_ID") 
    private String activeDoorId; 

    @Column(name = "VISIT_ID") 
    private long visitId; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "SAMPLE_DTM") 
    private Date sampleDateTime; 

    @Column(name = "SAMPLE_TIMEZONE") 
    private int sampleTimeZone; 

    @NotNull 
    @Column(name = "SYS_CYCLE_CNT") 
    private int systemCycleCount; 

    @NotNull 
    @Column(name = "CTRLR_CYCLE_CNT") 
    private int controllerCycleCount; 

当测试通过发送请求具有以下JSON到/cycle?&visit=1的API,我得到了406 。

{ 
    "activeDoorId": "d002", 
    "controllerCycleCount": 15000, 
    "systemCycleCount": 78000 
} 

这里是请求的扬鞭输出: enter image description here 当我尝试通过在处理程序方法的第一行设置断点来进行调试时,它在发送请求后甚至没有命中该行。 我有其他的终端类似于这个不需要在url中的变量,他们都工作。我为什么得到406?

回答

0

1 - 也许你可以改变你的方法,你可以使用不PathVariable一个RequestParameter

2-为了验证你可以把一个BindingResult用于验证数据的RequestBody,并可以显示,如果你的申请有错误。

@RequestMapping(value = "/cycle", 
    method = RequestMethod.POST, 
    consumes = "application/json", 
    produces = "text/plain", 
    params = "visit") 
@ResponseStatus(HttpStatus.CREATED) 
public String persistCycleCount(@RequestParam("visitId") Integer visitId, 
     @Valid @RequestBody CycleCount cycleCount, BindingResult result){ 
    if(result.hasErrors()){ 
     // Handler request errors 
    } 
    // Body method 
} 
+0

使用'RequestParam'工作。当你已经有@ Valid语句来验证JSON时,你需要什么'BindingResult'? – ddd