springmvc Converter和Formatter实验

1.要求:

(1)创建FruitConverter,负责将客户端提交的fruit参数,将其转换为Fruit类型的对象并填充该对象的caption与origin两个属性;(40分)

(2)创建FruitPriceFormatter,负责解析客户端提交的price参数,提取数字数据并转化为Float类型;(30分)

(3)me.spring.bean.Fruit类设计合理;(10分)

(4)正确配置spring-mvc.xml;(20分)

2.测试用例:

在这里插入图片描述

3.已知代码:


import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import me.spring.bean.Fruit;<--- 该类需自行创建

@Controller

@RequestMapping("/homework")

public class HomeworkController {

@RequestMapping(value = "/convert",produces = "application/json;charset=utf-8")

@ResponseBody

public Fruit convert(@RequestParam Fruit fruit,Float price) {

fruit.setPrice(price);

return fruit;

}

}

Fruit.java

package me.spring.bean;

public class Fruit {
	private String origin;
	private String caption;
	private float price;
	
	public String getOrigin() {
		return origin;
	}
	public void setOrigin(String origin) {
		this.origin = origin;
	}
	public String getCaption() {
		return caption;
	}
	public void setCaption(String caption) {
		this.caption = caption;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
}

FruitController.java

package me.spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import me.spring.bean.Fruit;

@Controller
@RequestMapping("/homework")
public class FruitController {

	@RequestMapping(value = "/convert",produces = "application/json;charset=utf-8")

	@ResponseBody

	public Fruit convert(@RequestParam Fruit fruit,Float price) {
		
//		测试地址: http://localhost:8080/convertAndFormat/homework/convert
		
		System.out.print("******************convert******************");
		
		fruit.setPrice(price);

		return fruit;

		}
	
}

FruitConverter.java

package me.spring.converter;

import org.springframework.core.convert.converter.Converter;

import me.spring.bean.Fruit;

public class FruitConverter implements Converter<String, Fruit> {
	
	@Override
	public Fruit convert(String input) {
		
		System.out.print("******************"+input+"******************");
		
		Fruit fruit = new Fruit();
		
		String[] values = input.split(":");

		String caption = values[0];

		String origin = values[1];

		fruit.setCaption(caption);

		fruit.setOrigin(origin);
		
		return fruit;

	}
	
}

FruitPriceFormatter.java

package me.spring.formatter;

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.format.Formatter;


public class FruitPriceFormatter implements Formatter<Number> {

	@Override
	public String print(Number arg0, Locale arg1) {
				
			System.out.println("******************print******************");
		
			NumberFormat numberFormat = NumberFormat.getInstance();
			
			return numberFormat.format(arg0);
		
	}

	@Override
	public Number parse(String arg0, Locale arg1) throws ParseException {
			
			System.out.print("******************parse******************");
			
			String reg = "[\u4E00-\u9FA5]";

			Pattern pat = Pattern.compile(reg);

			Matcher mat = pat.matcher(arg0);

			String longLoadPermit = mat.replaceAll("");
			
			Float numFloat = Float.parseFloat(longLoadPermit);
			
			return numFloat;
	}
	
}

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    
    <context:component-scan base-package="me.spring"/>

	<!--
	<context:annotation-config />
    -->
	
	<!-- 容器默认的DefaultServletHandler处理 所有静态内容与无RequestMapping处理的URL-->
	<mvc:default-servlet-handler/>

	<!-- 定义JSP文件的位置 --> 
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/template/"/>
		<property name="suffix" value=".jsp"/>
	</bean>	
	

	
	<bean id="formattingConversionService"
		class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
		<list>
		<bean class="me.spring.converter.FruitConverter"></bean>
		</list>
		</property>
		<property name="formatters">
		<list>
		<bean class="me.spring.formatter.FruitPriceFormatter"></bean>
		</list>
		</property>
	</bean>
	<mvc:annotation-driven conversion-service="formattingConversionService"/>

	
	<!-- 定义无Controller的path<->view直接映射 -->
	<mvc:view-controller path="/" view-name="redirect:/error/500"/>
	   	     
</beans>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`@RequestMapping`是Spring MVC框架中的一个重要注解,用于将HTTP请求映射到控制器的方法上。这个注解用于简化RESTful风格的Web服务开发,使得路由和处理逻辑更加清晰和模块化。下面是一些关于`@RequestMapping`实验小结的关键点: 1. **路径映射**:`@RequestMapping`用于指定一个或多个HTTP请求方法(GET, POST, PUT, DELETE等),以及对应的URL路径。例如,`@RequestMapping(value = "/users", method = RequestMethod.GET)`表示该方法处理所有发送到"/users"路径的GET请求。 2. **请求参数**:可以通过`@RequestParam`或`@PathVariable`注解处理请求参数,如查询参数、路径变量等。如`@RequestParam(name="id") Long userId`会从请求中获取名为"id"的查询参数。 3. **返回类型**:`@ResponseBody`可以用来标记返回值为JSON或XML响应体,而`@ModelAttribute`用于处理表单提交的模型属性。 4. **异常处理**:可以使用`@ExceptionHandler`注解来捕获特定的异常,并提供定制的错误处理。 5. **分组和扫描器**:为了方便管理,可以通过`@RequestMapping`的`@ControllerAdvice`或`@Controller`的`@RequestMapping(basePath = "/api/v1")`来对多个控制器进行分组或定义统一的路径前缀。 相关问题-- 1. `@RequestMapping`如何处理不同类型的HTTP请求? 2. 如何在Spring MVC中使用`@RequestParam`和`@PathVariable`? 3. `@ResponseBody`和`@ModelAttribute`的区别是什么? 4. 如何在Spring MVC中实现全局异常处理? 5. 分组和扫描器在Spring MVC中的应用场景是什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值