当前位置: 代码迷 >> 综合 >> JavaWeb中内部调用外部post、get方法
  详细解决方案

JavaWeb中内部调用外部post、get方法

热度:32   发布时间:2024-02-07 17:39:22.0

ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然。它使用JsonParser和JsonGenerator的实例实现JSON实际的读/写。

演示

Java对象转换为JSON对象:

public class ObjectMapperTest {public static void main(String[] args) throws IOException {//序列化的时候序列对象的所有属性  objectMapper.setSerializationInclusion(Include.ALWAYS);  //反序列化的时候如果多了其他属性,不抛出异常  objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);  //如果是空对象的时候,不抛异常  objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);  //创建实体类Person person = new Person(1, "tom", "123");//实体类转换为json字符串String jsonString = objectMapper.writeValueAsString(person);System.out.println("JsonString: " + jsonString);//字符串转换为类Person person1 = objectMapper.readValue(jsonString, Person.class);System.out.println(person1.toString());}}

Person 类:


public class Person {private int id;private String name;private String password;public Person() {super();}public Person(int id, String name, String password) {this.id = id;this.name = name;this.password = password;}/*省略get和set方法*/
}

Java数组对象和JSON数组对象转换

public class ObjectMapperTest {public static void main(String[] args) throws IOException {ObjectMapper objectMapper = new ObjectMapper();//Java数组转换为JSON数组Person person = new Person(1, "tom", "123");Person person1 = new Person(2, "jack", "123445");List<Person> personList = new ArrayList<>();personList.add(person);personList.add(person1);String jsonString = objectMapper.writeValueAsString(personList);System.out.println("JsonString List: " + jsonString);//Json数组转换为Java数组//JavaTypeJavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Person.class);List<Person> list = objectMapper.readValue(jsonString,javaType);//打印出list中的值for (Person person2 : list) {System.out.println(person2.toString());}}}

内部调用

post方法调用

	public <T> String post(String url, T param) {log.info("请求方式:POST");log.info("请求URL:{}", url);try {//入参转换字符串形式String paramSerialize = objectMapper.writeValueAsString(param);log.info("请求参数:{}", paramSerialize);//返回的出参String response = OkHttp3.getInstance().post(url, paramSerialize);log.info("请求返回数据:{}", response);return response;} catch (JsonProcessingException e) { // 捕获对象序列化异常log.error(e.getMessage());throw new ReddotServiceException(ExceptionCode.SYS_JSON_SERIALIZE_ERROE);} catch (IOException e) { log.error(e.getMessage());throw new ReddotServiceException(ExceptionCode.SYS_ERROR);}}

get方法调用

public <T> String get(String url, T param) {log.info("请求方式:GET");log.info("请求URL:{}", url);try {log.info("请求参数:{}", objectMapper.writeValueAsString(param));// 入参转换为Map 格式例: id(key),1(value)Map paramMap = objectMapper.readValue(objectMapper.writeValueAsString(param), new TypeReference<Map>() {});String response = (param == null ? OkHttp3.getInstance().get(url) : OkHttp3.getInstance().get(url, paramMap));log.info("请求返回数据:{}", response);//判断返回参数是否成功return response;} catch (JsonProcessingException e) {log.error(e.getMessage());throw new ReddotServiceException(ExceptionCode.SYS_JSON_SERIALIZE_ERROE);} catch (IOException e) {log.error(e.getMessage());throw new ReddotServiceException(ExceptionCode.SYS_ERROR);}}

传递参数的时候,就算你用的是map,那传输的时候也是json字符串,当然也可以直接试用JSON串进行传输。

大部分调用的url地址入参都能为JSON字符串形式,当然用Map也是可以的。

  相关解决方案