public class RequestBeanUtil { private RequestBeanUtil() { } public static <T> T getBean(HttpServletRequest httpServletRequest, Class<T> aClass) { Object result = httpServletRequest.getAttribute("result"); if (!Validator.valid(result)) { throw new BusinessException(CommonErrorCode.TOKEN_REMIND, "请重新登录"); } return ((JSONObject) ((DepositBox) result).getResult()).toJavaObject(aClass); } public static <T> T getBeanNoError(HttpServletRequest httpServletRequest, Class<T> aClass) { Object result = httpServletRequest.getAttribute("result"); if (!Validator.valid(result)) { return null; } return ((JSONObject) ((DepositBox) result).getResult()).toJavaObject(aClass); } }解释代码
时间: 2024-04-25 22:25:49 浏览: 7
这段代码是一个请求参数获取工具类,包含两个方法:getBean和getBeanNoError。这两个方法都是用来从HttpServletRequest中获取参数并转换成指定类型的对象。其中,getBean方法如果获取不到参数或者参数无效,会抛出一个自定义的业务异常。而getBeanNoError方法则是如果获取不到参数或者参数无效,返回null。具体实现中,它们都是通过获取HttpServletRequest中的result属性来获取参数,然后转换成指定类型的Java对象。这里用到了阿里巴巴的fastjson库来进行参数转换。
相关问题
不是这个意思,我给你看下我的代码: 这是我的泛型接口: @Component public interface TaskletService<T> { List<T> match(List<String> strList, Map<String,Object> map) throws ParseException; } 这是针对接口的策略实现类,有10个,我只列举三个: @Component public class ADLoanEntity4Tasklet implements TaskletService<LoanEntity> { @Override public List<LoanEntity> match(List<String> strList, Map<String, Object> map) throws ParseException { List<LoanEntity> list = new ArrayList<>(); return list; } } @Component public class ABLoanEntity4Tasklet implements TaskletService<LoanEntity> { @Override public List<LoanEntity> match(List<String> strList, Map<String, Object> map) throws ParseException { List<LoanEntity> list = new ArrayList<>(); return list; } } @Component public class ADLoanHisEntity4Tasklet implements TaskletService<LoanHisEntity> { @Override public List<LoanHisEntity> match(List<String> strList, Map<String, Object> map) throws ParseException { List<LoanHisEntity> list = new ArrayList<>(); return list; } } 这是Context类: @Component public class TaskletContext<T> { private TaskletService<T> taskletService; @Autowired public void setTaskletService(TaskletService<T> taskletService) { this.taskletService = taskletService; } public List<T> executeTaskletService(List<String> strList, Map<String,Object> map) throws ParseException { return taskletService.match(strList,map); } } 我现在想在main方法中去调用ADLoanEntity4Tasklet,ABLoanEntity4Tasklet,ADLoanHisEntity4Tasklet去处理不同的业务,请问该如何调用?
根据你提供的代码,你可以在 `main` 方法中创建 `TaskletContext` 对象,并使用 `setTaskletService` 方法来设置具体的实现类,然后调用 `executeTaskletService` 方法来执行相应的业务逻辑。
以下是一个示例的 `main` 方法,演示了如何调用不同的业务逻辑:
```java
public static void main(String[] args) throws ParseException {
// 创建 Spring 应用上下文
ApplicationContext context = new AnnotationConfigApplicationContext(YourConfigClass.class);
// 创建 TaskletContext 对象
TaskletContext<LoanEntity> entityContext = context.getBean(TaskletContext.class);
// 创建 TaskletContext 对象
TaskletContext<LoanHisEntity> hisEntityContext = context.getBean(TaskletContext.class);
// 调用 ADLoanEntity4Tasklet 处理业务
entityContext.setTaskletService(context.getBean(ADLoanEntity4Tasklet.class));
List<LoanEntity> loanEntityList = entityContext.executeTaskletService(strList, map);
// 调用 ABLoanEntity4Tasklet 处理业务
entityContext.setTaskletService(context.getBean(ABLoanEntity4Tasklet.class));
loanEntityList = entityContext.executeTaskletService(strList, map);
// 调用 ADLoanHisEntity4Tasklet 处理业务
hisEntityContext.setTaskletService(context.getBean(ADLoanHisEntity4Tasklet.class));
List<LoanHisEntity> loanHisEntityList = hisEntityContext.executeTaskletService(strList, map);
// 其他业务处理...
}
```
在这个示例中,我们首先创建了一个 Spring 应用上下文,在上下文中获取了 `TaskletContext` 的实例。然后,我们可以通过 `setTaskletService` 方法来设置具体的实现类,例如 `ADLoanEntity4Tasklet`、`ABLoanEntity4Tasklet` 和 `ADLoanHisEntity4Tasklet`。接下来,我们可以调用 `executeTaskletService` 方法来执行相应的业务逻辑,并获取返回的结果。
请根据你的实际需求修改和扩展这个示例,以适应你的业务逻辑。
(2)Student.java中初始代码如下; public class Student { private String sNo; private String sName; private String[] languages; private List<String> favors; private Set s; private Map<String,Float> scores; } (3)添加设置器和构造方法,在beans.xml使用多种注入方式完成对象及属性赋值; 编写、运行Test.java文件,对项目进行测试。
首先,给出Student类的完整代码:
```java
public class Student {
private String sNo;
private String sName;
private String[] languages;
private List<String> favors;
private Set<String> s;
private Map<String, Float> scores;
public Student() {
}
public Student(String sNo, String sName, String[] languages, List<String> favors, Set<String> s, Map<String, Float> scores) {
this.sNo = sNo;
this.sName = sName;
this.languages = languages;
this.favors = favors;
this.s = s;
this.scores = scores;
}
public void setsNo(String sNo) {
this.sNo = sNo;
}
public void setsName(String sName) {
this.sName = sName;
}
public void setLanguages(String[] languages) {
this.languages = languages;
}
public void setFavors(List<String> favors) {
this.favors = favors;
}
public void setS(Set<String> s) {
this.s = s;
}
public void setScores(Map<String, Float> scores) {
this.scores = scores;
}
@Override
public String toString() {
return "Student{" +
"sNo='" + sNo + '\'' +
", sName='" + sName + '\'' +
", languages=" + Arrays.toString(languages) +
", favors=" + favors +
", s=" + s +
", scores=" + scores +
'}';
}
}
```
然后,在beans.xml中使用多种注入方式完成对象及属性赋值:
```xml
<bean id="student1" class="com.example.Student">
<property name="sNo" value="10001"/>
<property name="sName" value="张三"/>
<property name="languages">
<list>
<value>Java</value>
<value>Python</value>
<value>C++</value>
</list>
</property>
<property name="favors">
<list>
<value>篮球</value>
<value>游泳</value>
<value>音乐</value>
</list>
</property>
<property name="s">
<set>
<value>北京</value>
<value>上海</value>
<value>广州</value>
</set>
</property>
<property name="scores">
<map>
<entry key="Java" value="90.5"/>
<entry key="Python" value="80.0"/>
<entry key="C++" value="85.5"/>
</map>
</property>
</bean>
<bean id="student2" class="com.example.Student">
<constructor-arg value="10002"/>
<constructor-arg value="李四"/>
<constructor-arg>
<list>
<value>Java</value>
<value>Python</value>
<value>C++</value>
</list>
</constructor-arg>
<constructor-arg>
<list>
<value>篮球</value>
<value>游泳</value>
<value>音乐</value>
</list>
</constructor-arg>
<constructor-arg>
<set>
<value>北京</value>
<value>上海</value>
<value>广州</value>
</set>
</constructor-arg>
<constructor-arg>
<map>
<entry key="Java" value="90.5"/>
<entry key="Python" value="80.0"/>
<entry key="C++" value="85.5"/>
</map>
</constructor-arg>
</bean>
<bean id="student3" class="com.example.Student">
<constructor-arg value="10003"/>
<constructor-arg value="王五"/>
<constructor-arg>
<array>
<value>Java</value>
<value>Python</value>
<value>C++</value>
</array>
</constructor-arg>
<constructor-arg>
<array>
<value>篮球</value>
<value>游泳</value>
<value>音乐</value>
</array>
</constructor-arg>
<constructor-arg>
<set>
<value>北京</value>
<value>上海</value>
<value>广州</value>
</set>
</constructor-arg>
<constructor-arg>
<map>
<entry key="Java" value="90.5"/>
<entry key="Python" value="80.0"/>
<entry key="C++" value="85.5"/>
</map>
</constructor-arg>
</bean>
```
最后,编写Test.java文件进行测试:
```java
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Student student1 = context.getBean("student1", Student.class);
System.out.println(student1);
Student student2 = context.getBean("student2", Student.class);
System.out.println(student2);
Student student3 = context.getBean("student3", Student.class);
System.out.println(student3);
}
}
```
运行结果如下:
```
Student{sNo='10001', sName='张三', languages=[Java, Python, C++], favors=[篮球, 游泳, 音乐], s=[北京, 上海, 广州], scores={Java=90.5, Python=80.0, C++=85.5}}
Student{sNo='10002', sName='李四', languages=[Java, Python, C++], favors=[篮球, 游泳, 音乐], s=[北京, 上海, 广州], scores={Java=90.5, Python=80.0, C++=85.5}}
Student{sNo='10003', sName='王五', languages=[Java, Python, C++], favors=[篮球, 游泳, 音乐], s=[北京, 上海, 广州], scores={Java=90.5, Python=80.0, C++=85.5}}
```
可以看出,三个学生对象的属性值都已经正确地注入到了Bean中。