实体未发布到宁静的服务

时间:2016-11-03 08:54:32

标签: jackson jax-rs

我在向restfull服务发布请求时遇到问题。 看起来我的实体没有正确转换为json。 我收到400 Bad请求回复。

我怀疑它是导致问题的DateTimeRange对象的列表 - 因为我有一个非常相似的请求,但是所有的pojos属性都是字符串。

我是否需要注释我的实体,以便为列表和我的自定义DateTimeRange启用/来自json的编组?

String actionUrl = buildUrl( myResftullUrlTest );
Client client = ClientBuilder.newClient().register( JacksonJsonProvider.class );
Builder target = client.target( actionUrl ).request();

CreateWebinarRequest createWebinarRequest = new CreateWebinarRequest();
createWebinarRequest.setDescription("Test1 desc");
createWebinarRequest.setSubject("Test1 subject")
createWebinarRequest.setTimeZone("Europe/Dublin")

List<DateTimeRange> dateTimeRangeParam = new ArrayList<DateTimeRange>();
DateTimeRange dateTimeRange = new DateTimeRange();
dateTimeRange.setStartTime( "2016-11-03T08:34:12" );
dateTimeRange.setEndTime( "2016-11-03T09:34:12" );
dateTimeRangeParam.add( dateTimeRange ); 
createWebinarRequest.setTimes( dateTimeRangeParam );

Response response = null;
switch ( goToTrainingRequestData.getRequestType() ) {
  case HTTP_POST :
    response = target.buildPost( Entity.json(createWebinarRequest) ).invoke();
    ...
  }
}

CreateWebinarRequest:

public class CreateWebinarRequest implements Serializable {
  private String subject = null;
  private String description = null;
  private List<DateTimeRange> times = new ArrayList<DateTimeRange>(); 
  private String timeZone = null;

  public String getSubject() {
    return subject;
  }

  public void setSubject( String subject ) {
    this.subject = subject;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription( String description ) {
    this.description = description;
  }

  public List<DateTimeRange> getTimes() {
    return times;
  }

  public void setTimes( List<DateTimeRange> times ) {
    this.times = times;
  }

  public String getTimeZone() {
    return timeZone;
  }

  public void setTimeZone( String timeZone ) {
    this.timeZone = timeZone;
  }
}

DateTimeRange:

public class DateTimeRange {
  private String startTime = null;
  private String endTime = null;

  public String getStartTime() {
    return startTime;
  }

  public void setStartTime( String startTime ) {
    this.startTime = startTime;
  }

  public String getEndTime() {
    return endTime;
  }

  public void setEndTime( String endTime ) {
    this.endTime = endTime;
  }
}

1 个答案:

答案 0 :(得分:0)

问题解决了男人和女孩! 任何数据编组都没有错,我从服务器获得了详细的响应:

 String error = response.readEntity( String.class );

这是我的嘘声!

{"errorCode":"RequestValidationError","description":"Request contains invalid parameters. See validationErrorCodes for specific errors.","Details":"times cannot be in past","incident":"6100682426566883853","validationErrorCodes":[{"code":"requestStartTimeInPast","description":"times cannot be in past"}]}