相关疑难解决方法(0)

JsonMappingException:超出START_ARRAY令牌

给出以下.json文件:

[
    {
        "name" : "New York",
        "number" : "732921",
        "center" : [
                "latitude" : 38.895111, 
                "longitude" : -77.036667
            ]
    },
    {
        "name" : "San Francisco",
        "number" : "298732",
        "center" : [
                "latitude" : 37.783333, 
                "longitude" : -122.416667
            ]
    }
]
Run Code Online (Sandbox Code Playgroud)

我准备了两个类来表示包含的数据:

public class Location {
    public String name;
    public int number;
    public GeoPoint center;
}
Run Code Online (Sandbox Code Playgroud)

...

public class GeoPoint {
    public double latitude;
    public double longitude;
}
Run Code Online (Sandbox Code Playgroud)

为了解析.json文件中的内容,我使用Jackson 2.2.x并准备了以下方法:

public static List<Location> getLocations(InputStream inputStream) {
    ObjectMapper objectMapper …
Run Code Online (Sandbox Code Playgroud)

java arrays json jackson

85
推荐指数
4
解决办法
26万
查看次数

REST客户端restTemplate无法获取对象集合

我使用Spring restTemplate.我在单独的应用程序中将REST服务和客户端作为单元测试.我有返回用户列表的方法和用户创建方法:

@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON,
        MediaType.TEXT_XML })
@Path("/all")
public Response getAllUsers() {
    List<User> list = dao.getAll();
    GenericEntity<List<User>> result = new GenericEntity<List<User>>(list) {
    };
    return Response.status(Status.OK).entity(result).build();
}
Run Code Online (Sandbox Code Playgroud)

如果我要求在浏览器中向我显示所有用户,它会向我显示xml.没关系.但是,当我尝试使用它时:

@Test
public void testGetAll() {
    List list = new RestTemplate().getForObject(URL + "all", List.class);
    System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)

我有

WARNING: GET request for "http://localhost:8080/REST/all" resulted in 500 (Internal Server Error); invoking error handler
Run Code Online (Sandbox Code Playgroud)

我试着调试这个.方法工作期间没有例外.浏览器向我展示了用户的xml.有什么不对?

另外,我想知道,如何从模板对象中获取状态代码或消息(用于测试)?

谢谢你的回答.

编辑:

我修改了我的测试方法:

@Test
public void testGetAll() {
    RestTemplate template = new RestTemplate();

    List<HttpMessageConverter<?>> messageConverters = new    ArrayList<HttpMessageConverter<?>>();
    Jaxb2RootElementHttpMessageConverter jaxbMessageConverter …
Run Code Online (Sandbox Code Playgroud)

java collections rest spring resttemplate

30
推荐指数
4
解决办法
6万
查看次数

如何使用Spring RestTemplate使用Page <Entity>响应

我正在使用spring数据(mongoDb),我有我的存储库:

public interface StoriesRepository extends PagingAndSortingRepository<Story, String> {}
Run Code Online (Sandbox Code Playgroud)

然后我有一个控制器:

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Page<StoryResponse>> getStories(Pageable pageable) {
    Page<StoryResponse> stories = storiesRepository.findAll(pageable).map(StoryResponseMapper::toStoryResponse);
    return ResponseEntity.ok(stories);
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但我无法使用RestTemplate getForEntity方法使用我的端点:

def entity = restTemplate.getForEntity(getLocalhost("/story"), new TypeReference<Page<StoryResponse>>(){}.class)
Run Code Online (Sandbox Code Playgroud)

我应该提供什么类来成功反序列化我的实体页面?

java rest spring spring-data spring-data-rest

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

Spring RestTemplate和泛型类型ParameterizedTypeReference集合,如List <T>

Abstract控制器类需要REST中的对象列表.使用Spring RestTemplate时,它不会将其映射到所需的类,而是返回Linked HashMAp

 public List<T> restFindAll() {

    RestTemplate restTemplate = RestClient.build().restTemplate();
    ParameterizedTypeReference<List<T>>  parameterizedTypeReference = new ParameterizedTypeReference<List<T>>(){};
    String uri= BASE_URI +"/"+ getPath();

    ResponseEntity<List<T>> exchange = restTemplate.exchange(uri, HttpMethod.GET, null,parameterizedTypeReference);
    List<T> entities = exchange.getBody();
    // here entities are List<LinkedHashMap>
    return entities;

}
Run Code Online (Sandbox Code Playgroud)

如果我用,

ParameterizedTypeReference<List<AttributeInfo>>  parameterizedTypeReference = 
    new ParameterizedTypeReference<List<AttributeInfo>>(){};
    ResponseEntity<List<AttributeInfo>> exchange =
  restTemplate.exchange(uri, HttpMethod.GET, null,parameterizedTypeReference);
Run Code Online (Sandbox Code Playgroud)

它工作正常.但不能放入所有子类,任何其他解决方案.

java resttemplate spring-web spring-rest

26
推荐指数
3
解决办法
3万
查看次数

restTemplate.getForObject("URL", Object[].class) 可以返回 NULL 吗?

我已经使用了这个答案中的解决方案: 使用 Spring RestTemplate 获取 JSON 对象列表 它工作得很好。它完全符合我的需要。

ProcessDefinition[] response = restTemplate.getForObject(url, ProcessDefinition[].class);
Run Code Online (Sandbox Code Playgroud)

是否足够:

return Arrays.asList(response);
Run Code Online (Sandbox Code Playgroud)

或者这样会更好:

return Arrays.asList(Optional.ofNullable(response).orElse(new ProcessDefinition[0]));
Run Code Online (Sandbox Code Playgroud)

PS 抱歉开始新话题,但我的业力不允许我评论答案。

java spring resttemplate

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

使用Pageable字段测试端点时出现JsonMappingException

我需要调用一个期望Pageable字段的端点:

@GetMapping
public Page<ProductDTO> listProducts(Pageable pageable) {
    return productService.findProducts(pageable); 
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中我有这个代码:

MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
parameters.add("page", String.valueOf(0));
URI url = defaultURI(port, "/products", parameters);

ParameterizedTypeReference<RestResponsePage<ProductDTO>> type = new ParameterizedTypeReference<RestResponsePage<ProductDTO>>() {};
ResponseEntity<RestResponsePage<ProductDTO>> response = restTemplate.exchange(url.toString(), HttpMethod.GET, httpEntity, type);
Run Code Online (Sandbox Code Playgroud)

PageImpl不包含默认构造函数,所以为了避免这个问题我创建了一个类,如下所示传递给ParameterizedTypeReference:

@JsonIgnoreProperties(ignoreUnknown = true) @Getter @Setter
public class RestResponsePage<T> extends PageImpl<T> implements Serializable {

    private static final long serialVersionUID = 3844794233375694591L;

    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
    public RestResponsePage(@JsonProperty("content") List<T> content,
                        @JsonProperty("number") int page,
                        @JsonProperty("size") int size,
                        @JsonProperty("totalElements") long totalElements) …
Run Code Online (Sandbox Code Playgroud)

java rest jackson spring-boot

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