小编Rya*_*Zhu的帖子

尝试在java中使用protobuf发送和接收消息,但收到错误:协议消息包含无效标记(零)

问题发生在服务器端,parseDelimitedFrom()调用.

客户端:

    C2SGainCard.Builder s = C2SGainCard.newBuilder();
    C2SGainCard c2s = s.build();

    GameRequest.Builder  reqBuilder=GameRequest.newBuilder();
    reqBuilder.setBody(c2s.toByteString());
    reqBuilder.setName(C2SGainCard.class.getSimpleName());
    reqBuilder.setPlayerId("3");
    GameRequest request=reqBuilder.build();

    DataOutputStream os = new DataOutputStream(socket.getOutputStream());
    os.write(request.toByteArray());
    os.flush();
    os.close();
    socket.close();
Run Code Online (Sandbox Code Playgroud)

服务器端:

    try{
        DataInputStream is = new DataInputStream(socket.getInputStream());
        GameRequest gameRequest = GameRequest.parseDelimitedFrom(is);
    }catch(Exception ex){
        System.out.println(ex.getMessage());
    }
Run Code Online (Sandbox Code Playgroud)

这是另一个类似的问题:

客户端:

    C2SSell.Builder s = C2SSell.newBuilder();
    CardOnSell.Builder cardOnSell = CardOnSell.newBuilder();
    cardOnSell.setId(1);
    cardOnSell.setPlayerId(3);
    cardOnSell.setCardId(1);
    cardOnSell.setCurrentPrice(111);
    cardOnSell.setFixedPrice(555);
    cardOnSell.setDescription("cao");

    s.setCardOnSell(cardOnSell.build());

    C2SSell c2s = s.build(); 
Run Code Online (Sandbox Code Playgroud)

套接字处理是一样的.

服务器端:

    DataInputStream is = new DataInputStream(socket.getInputStream());
    byte[] b = new byte[1024];
    int len=is.read(b);
    String as = new …
Run Code Online (Sandbox Code Playgroud)

java protocol-buffers

5
推荐指数
1
解决办法
9889
查看次数

在rspec测试中创建一个对象变量但是没有

这是我的rspec代码:

describe User do
  before{(@user=User.new(username:"abcdefg",email:"123456@123.com",password:"123456")}
  subject(@user)
  @user.save
end
Run Code Online (Sandbox Code Playgroud)

我有这样一个错误: undefined method 'save' for nil:NilClass(NoMethodError)

我尝试在rails控制台中编写相同的代码,它只是起作用.但是当谈到Rspec时,它失败了,我找不到任何理由......

任何人都可以帮助我吗?

rspec ruby-on-rails

4
推荐指数
2
解决办法
5535
查看次数

@Valid 注释在 spring boot 中不起作用

这是一个场景,一个用注释的控制器@RestController和一个需要验证参数的PUT方法@RequestBody。我@Valid在参数和 上使用注释@NotNull@Min对 bean 字段使用注释,但它们不起作用。

代码在这里:

豆:

public class PurchaseWrapper {
  @DecimalMin(value = "0.00",message = "discount must be positive")
  @NotNull
  private BigDecimal discount;
  @NotNull
  private Long merchandiseId;
  @NotNull
  private Long addressId;
  @Min(1)
  @NotNull
  private Integer count;
}
Run Code Online (Sandbox Code Playgroud)

控制器

@RestController
@RequestMapping("merchandises")
public class MerchandiseController {

@RequestMapping(value = "purchase",method = RequestMethod.PUT)
public ResponseEntity<RestEntity> purchase(@Valid @Validated @RequestBody PurchaseWrapper purchaseWrapper,
                                           @RequestParam String token){
    return new ResponseEntity<>(merchandiseService.purchase(purchaseWrapper,token),HttpStatus.OK);
}

@Autowired
PurchaseWrapperValidator purchaseWrapperValidator;

@InitBinder(value = "purchaseWrapper") …
Run Code Online (Sandbox Code Playgroud)

java validation spring spring-boot

4
推荐指数
1
解决办法
2万
查看次数