当我(在浏览器中点击URL)到某个URL时 我得到了一个匹配我的类字段的json响应(GET RESPONSE)。
我想将这个json转换为我的对象而不使用像jackson这样的Java转换器。
我可以在这里使用什么样的弹簧注释?
我尝试做的是这样的,所以它会自动将json转换为对象:
@RequestMapping("/getCar")
public Car getCar(@SOMEANNOTATION(Car car)
{ return car;}
答案 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);
}