Spring以json的形式获得响应以进行对象转换

时间:2017-09-29 06:10:48

标签: java spring

当我(在浏览器中点击URL)到某个URL时 我得到了一个匹配我的类字段的json响应(GET RESPONSE)。

我想将这个json转换为我的对象而不使用像jackson这样的Java转换器。

我可以在这里使用什么样的弹簧注释?

我尝试做的是这样的,所以它会自动将json转换为对象:

@RequestMapping("/getCar") 
public Car getCar(@SOMEANNOTATION(Car car) 
{ return car;}

4 个答案:

答案 0 :(得分:1)

你可以尝试这个@Consumes({“application / json”,“application / xml”})

答案 1 :(得分:1)

你可以使用RestTemplate:

RestTemplate restTemplate = new RestTemplate();
Car car = restTemplate.getForObject("http://localhost:8080/getCar", Car.class);

你需要一辆Class汽车,所以Spring可以映射它:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Car {
    ...
}

但你需要明白,Spring仍然会使用一些转换器来创建/读取数据......

答案 2 :(得分:1)

Sring Boot文档 Building a RESTful Web Service 还有另一种解决方案。

基本上,对象的序列化/反序列化由Spring转换器自动处理。换句话说,在这种情况下你无需做什么

考虑一个基本的REST控制器:

SELECT s.acctno, (SELECT TOP 1 z.locationaddr FROM 
    (SELECT s.acctno, MAX(s.serivcecode) as maxcode, s.locationcode, l.locationaddr FROM service s 
        LEFT JOIN location l on l.locationcode = s.locationcode
        GROUP BY s.acctno, s.locationcode, l.locationaddr) z WHERE s.acctno = z.acctno 
        ORDER BY maxcode DESC
FROM service s 

<强>解释

  

package hello; import java.util.concurrent.atomic.AtomicLong; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class GreetingController { private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } } 对象必须转换为JSON。感谢Spring的HTTP   消息转换器支持,您不需要执行此转换   手动。因为 Jackson 2 在类路径上,所以是Spring   系统会自动选择MappingJackson2HttpMessageConverter进行转换   {J}的Greeting实例。

答案 3 :(得分:0)

您必须使用类似的东西自动将请求主体json转换为Java对象。

@RequestMapping("/getCar", method =RequestMethod.POST,
produces=MediaType.APPLICATION_JSON_VALUE,consumes=MediaType.APPLICATION_JSON_VALUE)

public Car getCar(@RequestBody Car car){
    return car;
}

但是,Spring会在后端使用HttpMessageConverter将您的json请求转换为POJO。应该将这样的内容添加到您的@Configuration

public void configureMessageConverters() {
        List<HttpMessageConverter<?> messageConverters = new ArrayList<>();
        messageConverters.add(new MappingJackson2HttpMessageConverter());

        super.configureMessageConverters(converters);
}