小编Han*_*nsi的帖子

Dropwizard/Jersey:身份验证和JSON参数

我想为资源的REST接口提供这样的方法

@POST
@Consumes(MediaType.APPLICATION_JSON)
public void add(@Auth User user, @Valid Food food) {
    //consume
}
Run Code Online (Sandbox Code Playgroud)

但是,这是不可能的,因为我得到一个错误,如:"严重:缺少方法public void com.restaurant.FoodResource.add(com.restaurant.User,com.restaurant.Food)的依赖关系在索引0处的参数:SEVERE:Missing方法public void com.restaurant.FoodResource.add(com.restaurant.User,com.restaurant.Food)的索引在索引1的参数SEVERE:Method,public void com.restaurant.FoodResource.add(com.restaurant.User, com.restaurant.Food),用资源的POST注释,类com.restaurant.FoodResource,不被认为是有效的资源方法.

我发现根据规范(3.3.2.1实体参数),不可能有两个没有注释某些注释的参数http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html

还有什么选择可以做这样的事情?我想到的是一个封装User和Food的对象,但这似乎不是一个很好的解决方案.

有没有其他更优雅的方式来做这样的事情?我可以将JSON Food表示作为@PathParam发送吗?

authentication parameters json jersey dropwizard

6
推荐指数
1
解决办法
2482
查看次数

JSON:Serialize Guava可选

是否有com.google.common.base.Optional的Json Serializer/Deserializer?

开箱即用这似乎不适用于杰克逊,见下文:

package com.example;

import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

import com.google.common.base.Optional;

public class TestClass {

public Optional<String> myString;

public TestClass() {
    myString = Optional.of("testString");
}

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
    TestClass testClass = new TestClass();
    ObjectMapper objectMapper = new ObjectMapper();
    String jsonString = objectMapper.writeValueAsString(testClass);
    System.out.println(jsonString);
}
Run Code Online (Sandbox Code Playgroud)

}

- > {"myString":{"present":true}}

serialization json optional jackson guava

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